parseint函数(round函数保留2位小数)
大家好,parseint函数相信很多的网友都不是很明白,包括round函数保留2位小数也是一样,不过没有关系,接下来就来为大家分享关于parseint函数和round函数保留2位小数的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
parseInt() 函数的奇怪行为
parseInt()是一个内置的 JavaScript函数,用于从数字字符串中解析整数。例如,让我们从数字字符串'100'中解析整数:
正如预期的那样,'100'被解析为整数 100。
parseInt(numericalString, radix)还接受第二个参数:数字字符串参数所在的基数。 radix参数允许我们解析不同数字基数的整数,最常见的是 2、8、10和 16。
让我们使用 parseInt()来解析基数为 2的数字字符串:
parseInt('100', 2)将'100'解析为基数为 2的整数:因此它返回值 4(十进制)。
parseInt(numericalString)总是将其第一个参数转换为字符串(如果它不是字符串),然后将该数字字符串解析为整数值。
这就是为什么我们可以(但不应该!)使用parseInt()来提取浮点数的整数部分的原因:
提取浮点数的整数部分,如 0.5、0.05等,结果为 0。这一切正常。
但是如果提取 0.0000005的整数部分怎么样?
parseInt()将浮点数 0.0000005解析为... 5.有趣且有点出乎意料...
为什么 parseInt(0.0000005)有这么奇怪的行为?
让我们再看看 parseInt(numericalString)对它的第一个参数做了什么:如果它不是字符串,则将其转换为字符串,然后进行解析,并返回解析后的整数。
这是第一个线索。
然后让我们尝试手动将浮点数转换为字符串表示:
显式转换为 String(0.0000005)字符串的结果与其他浮点数不同:它是指数计数法的字符串!
这是第二个——也是一个重要的线索!
当指数计数法字符串被解析为一个整数时,我们会得到数字 5:
parseInt('5e-7')只处理第一个数字'5',但忽略'e-7'。
谜团已揭开!因为 parseInt()总是将其第一个参数转换为字符串,所以小于10-6的浮点数以指数表示法写入。然后 parseInt()从浮点数的指数符号中提取整数。
附带说明一下,为了安全地提取浮点数的整数部分,推荐 Math.floor()函数:
parseInt()是将数字字符串解析为整数的函数。
尝试使用 parseInt()提取浮点数的整数部分时必须小心。
小于10-6的浮点数会转换为以指数表示法的字符串(例如 5e-7是 0.0000005的指数表示法),而且只转换数字部分,这就是为什么在 parseInt()中转换小浮点数会导致意外结果的原因。
附带挑战:你能解释一下为什么 parseInt(9999999999999999999999)等于 1吗?
parseInt是什么意思
parseInt是用于将字符串根据基数转换成整数。首先parseInt()函数中可以给定两个参数,第一个是要解析的数,第二个是以多少进制解析。
例如parseInt(‘10’,8)的意思为把一个8进制数10,转换成一个10进制数,最后结果当然为8.
接着我们再看个例子,parseInt(‘100’,8),把一个8进制数100,转换成一个10进制数,最后结果那便是64,记住parseInt把最后结果都是转换成10进制数。
最后再看个例子,parseInt(‘12’,2)把一个二进制数12,转换成一个10进制数,因为二进制数中不存在2,因此解析时仅仅只解析数字1,将二进制的1换成十进制,结果显然就是1.
V8中parseInt函数的源码:【只列出一部分,如需要查看请参见V8中src/conversions-inl.h和src/compiler/js-builtin-reducer.cc】
if(radix== 0){//如果传入radix是0,则以10进行处理
// Radix detection.
radix= 10;
if(*current=='0'){
++current;
if(current== end) return SignedZero(negative);
if(*current=='x'||*current=='X'){
radix= 16;
++current;
if(current== end) return JunkStringValue();
} else{
leading_zero= true;
}
}
} else if(radix== 16){//16进制
if(*current=='0'){
// Allow"0x" prefix.
++current;
if(current== end) return SignedZero(negative);
if(*current=='x'||*current=='X'){
++current;
if(current== end) return JunkStringValue();
} else{
leading_zero= true;
}
}
}
if(radix< 2|| radix> 36) return JunkStringValue();//radix不在2~36之间的处理
例如解析:
parseInt('0101', 1)=> NaN
parseInt('453', 2)=> NaN因为453不符合二进制数字,所以无法转换出正确的数字
Js里面parseInt 字符串转换数字详细解释
JavaScript中parseInt函数用法如下:
parseInt()函数可解析一个字符串,并返回一个整数
parseInt(string, radix)
string:
必需。要被解析的字符串。
radix:
可选。表示要解析的数字的基数。该值介于 2~ 36之间。
如果省略该参数或其值为 0,则数字将以 10为基础来解析。
如果它以“0x”或“0X”开头,将以 16为基数。
如果该参数小于 2或者大于 36,则 parseInt()将返回 NaN。
返回值:返回解析后的数字。
说明:
当参数radix的值为 0,或没有设置该参数时,parseInt()会根据string来判断数字的基数。
举例:
如果string以"0x"开头,parseInt()会把string的其余部分解析为十六进制的整数。
如果string以 0开头,那么 ECMAScript v3允许 parseInt()的一个实现把其后的字符解析为八进制或十六进制的数字。
如果string以 1~ 9的数字开头,parseInt()将把它解析为十进制的整数。
提示:
只有字符串中的第一个数字会被返回。
开头和结尾的空格是允许的。
如果字符串的第一个字符不能被转换为数字,那么 parseFloat()会返回 NaN。
如果你还想了解更多这方面的信息,记得收藏关注本站。