这看起来真的很愚蠢,但在运行时会显示
7.300000000000001而不是7.3
<script language="javascript"> function buttonClicked() { var mySum = 1.1 + 1.1 + 1.1 + 0 + 4; alert(mySum); } </script>
这会导致什么?我在一个非常基本的aspx页面上有javascript。我们实际上是使用javascript从表单输入中添加值,这只是一个打破它的数字的例子,还有很多其他的..
知道可以做什么吗?!?
答案 0 :(得分:8)
它与十进制值如何转换为二进制浮点数有关。 1/10变成二进制的重复小数,因此数字没有完美表示,重复操作可以暴露错误。
JavaScript使用IEEE-754浮点数作为记录。其他一些语言有同样的问题。
如何处理?在您的情况下,也许toPrecision()。
答案 1 :(得分:4)
浮点数的尾数部分(小数点后的部分)存储为分数之和。它们是通过添加一系列分数来计算的。分数的顺序是:
1/2, 1/4, 1/8, 1/16, 1/32, 1/64, 1/128, ... etc
二进制表示存储为0和1,表示是/否。例如,001010将为0 * 1/2 + 0 * 1/4 + 1 * 1/8 + 0 * 1/16 + 1 * 1/32。
这是浮点数不准确的原因的一个粗略示例。当您添加精度(float - &gt; double - &gt; long double)时,您可以获得更高的精度。
存储的基础二进制数据分为两部分 - 一部分用于小数点前面的部分,另一部分用于小数点后的部分。由于可以执行计算的速度(以及可能还有其他因素在上面),它已被采用IEEE standard。
检查此链接以获取更多信息: http://docs.sun.com/source/806-3568/ncg_goldberg.html
答案 2 :(得分:1)