84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
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高级书中有这么一句话
应该能解决这个疑问吧