6

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

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

106 / 100 * 10

它返回给我:

10.600000000000001

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

4

5 回答 5

5

不,结果是正确的(即使更改操作顺序可能会导致不同的结果),这是 IEEE754 浮点存储的奇迹之一:数字不像您看到的那样存储的事实的后果,那是一些十进制数字和一个逗号,但作为

K * 2 ^ N

其中 K 和 N 是有符号整数。

当然,并非所有数字都可以准确存储,只能接近其他数字。

我建议您阅读IEEE754 计算简介

您需要的是在将数字输出给用户时对其进行格式化,例如使用

var string = myNumber.toFixed(1);
于 2013-05-10T19:13:43.937 回答
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 位。

于 2013-05-10T19:15:02.683 回答
1

Try Below :

Var myAnswer = 106 / 100 * 10;
var result = myAnswer.toFixed(1);

Javascript: formatting a rounded number to N decimals

How this will work for you...

Enajoy your day..!!!

于 2013-05-10T19:20:12.633 回答
0

双精度。数字以 2 的幂的形式存储在计算机中,例如1/2 + 1/4 + 1/8...,当以小数形式打印时,它们可能不准确。

于 2013-05-10T19:14:21.837 回答
0

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

于 2013-05-10T19:16:28.267 回答