以js计算百分比

时间:2013-05-10 19:11:59

标签: javascript math percentage

我正在尝试使用javascript创建一个简单的百分比计算器。

我在控制台中尝试一个简单的计算(试一试):

106 / 100 * 10

然后它回报我:

10.600000000000001

这里发生了什么?括号没有区别,每个数字都不会出现这种情况。我希望结果是10.6对吗?任何人都可以提供解释吗?这不是浏览器特定的,它发生在Chrome开发工具和firebug中。

5 个答案:

答案 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)

你可以尝试(106/1000)* 100