我正在尝试使用javascript创建一个简单的百分比计算器。
我在控制台中尝试一个简单的计算(试一试):
106 / 100 * 10
然后它回报我:
10.600000000000001
这里发生了什么?括号没有区别,每个数字都不会出现这种情况。我希望结果是10.6
对吗?任何人都可以提供解释吗?这不是浏览器特定的,它发生在Chrome开发工具和firebug中。
答案 0 :(得分:5)
不,结果是正确的(即使改变操作顺序可能会导致不同的结果),这是IEEE754浮点存储的奇迹之一:数字不像你一样存储的结果看到它们,这是一些十进制数字和一个逗号,但作为
K * 2 ^ N
其中K和N是有符号整数。
当然,并非所有数字都可以准确存储,只接触其他数字。
我建议你阅读this introduction to IEEE754 computing。
您需要的是在将数字输出给用户时格式化数字,例如使用
var string = myNumber.toFixed(1);
答案 1 :(得分:4)
并非所有十进制数字都具有二进制的精确表示,因此当您尝试使用浮点数进行数学运算时,这类问题会经常发生。
转换为二进制,您的操作如下:
106 = 64 + 32 + 8 + 2 = 1101010
100 = 64 + 32 + 4 = 1100100
1101010 / 1100100 = 1010.10011001100...
然后将其乘以10或二进制的101并得到
1010.10011001100... * 101 = 1010.1001100110011001100...
相当评估为10.6。
在您的特定情况下,该号码已被截断为1010.10011001100110011001100110011001或36位。
答案 2 :(得分:1)
尝试下面的内容:
Var myAnswer = 106 / 100 * 10;
var result = myAnswer.toFixed(1);
Javascript: formatting a rounded number to N decimals
这对你有用......
Enajoy你的一天...... !!!
答案 3 :(得分:0)
双精度。数字作为2的幂存储在计算机中,例如1/2 + 1/4 + 1/8...
所以当打印成小数时,它们可能不准确。
答案 4 :(得分:0)