84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
var a = parseInt(0.27632590162620094e+21); var b = parseInt(0.27632590162620094e+22); console.log(a,b);
显示的结果完全不一样,为什么?困惑了好久
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
我的理解是这样的:
javascript先对里面的科学表达式进行计算得出结果,那么第一个是整数276325901626200950000,第二个是整数2763259016262009500000。第二个比第一个多一个0,到这里都没有问题。
由于parseInt()的输入要求是字符串,所以javascript对刚才那两个计算结果做toString()类型转换操作。
21次方的276325901626200950000,会变成"276325901626200950000"
22次方的2763259016262009500000,会变成"2.76325901626201e+21"这里应该是到21位以上,javascript自动转成科学记数法表示。
parseInt对刚才两个字符串作解析:
> parseInt("276325901626200950000") 276325901626200950000 > parseInt("2.76325901626201e+21") 2
为什么后一个是2,很简单了,按parseInt的定义:
If parseInt encounters a character that is not a numeral in the specified radix, it ignores it and all succeeding characters and returns the integer value parsed up to that point
也就是说当parseInt发现有字符串中有一个字母不是数字,就把这个字母和后面的都丢弃,相当于parseInt("2.76325901626201"),这样结果自然是2了
@manong 说的对,你在控制台可以试试
在js高级书中有这么一句话
toPrecision() 方法可以表现 1 到 21 位小数。不同浏览器的支持范围可能有所差别
应该能解决这个疑问吧
我的理解是这样的:
javascript先对里面的科学表达式进行计算得出结果,那么第一个是整数276325901626200950000,第二个是整数2763259016262009500000。第二个比第一个多一个0,到这里都没有问题。
由于parseInt()的输入要求是字符串,所以javascript对刚才那两个计算结果做toString()类型转换操作。
21次方的276325901626200950000,会变成"276325901626200950000"
22次方的2763259016262009500000,会变成"2.76325901626201e+21"
这里应该是到21位以上,javascript自动转成科学记数法表示。
parseInt对刚才两个字符串作解析:
为什么后一个是2,很简单了,按parseInt的定义:
也就是说当parseInt发现有字符串中有一个字母不是数字,就把这个字母和后面的都丢弃,相当于parseInt("2.76325901626201"),这样结果自然是2了
@manong 说的对,你在控制台可以试试
在js高级书中有这么一句话
应该能解决这个疑问吧