【发布时间】:2017-08-21 22:22:24
【问题描述】:
我一直在调查 JavaScript 中的一些因浮点实现而产生的奇怪之处:
> Number(Math.round(1.005*100)/100);
1
我知道这是四舍五入,因为 (1.005 * 100) 的浮点表示是 100.49999999999999
但是当我这样做时:
> Number(Math.round(1.005e2)+'e-2');
1.01
或更简洁地说:
>1.005e2;
100.5
我得到了预期的(出乎意料的!)结果。为什么 JavaScript 将 (1.005e2) 评估为 100.5?是在幕后使用另一种原始类型还是字符串解析的结果?
如果有人能指出有关 e 表示法实现的规范,我将不胜感激!
【问题讨论】:
-
我认为这是因为 E2 是一个字符串,因为你作为第二部分它会自动评估为一个字符串
-
您好,感谢您的评论!如果我在 chrome 中通过我的调试器运行 >1.005e2,它的计算结果为 100.5,带有数字类型。我相信在这种情况下输入也是一个数字
-
不是表示,是操作导致不准确。
标签: javascript floating-point rounding rounding-error