可能重复: JavaScript的数学坏了吗?
...and,我能做些什么来反对它?计算之后,我希望得到结果的字符串表示。正因为如此,零(加上1)才会被去除。"toFixed()“不是一个完美的解决方案,因为我希望有所有的(正确的)小数的潜在结果,我不知道结果(和小数)之前。因此,上面所示的计算只是一个例子。
发布于 2012-08-01 06:43:19
简单的回答是:计算机用二进制表示数字,所以它们不能像JavaScript数那样完美地表示所有的10个基分数。
(稍长一点)答案是,因为JavaScript数字是64位浮点(相当于double类型在这里、C#等),所以像维基百科描述的这里一样,意义和位的数量是有限的。因此,这个基-2数的精度是有限的.
作为一个类推,考虑用基数10表示1/3的分数,假设你只有那么多数字可以使用。这意味着你永远不可能在基数10中精确地表示1/3,因为1/3需要无限数量的数字才能在基数10中表示。同样,你也不可能在有限的位数中完美地表示1/ 10,因为1/10需要无限的位数来精确表示。你在这里看到的是一个分数(58/10),一台计算机不能用有限的位来表示,所以计算机正尽可能地接近它。
发布于 2012-08-01 06:47:35
将无限多个实数压缩到有限的位数需要近似表示。虽然有无限多的整数,但在大多数程序中,整数计算的结果可以存储在32位。相反,在给定任何固定位数的情况下,大多数实数计算都会产生无法用那么多位精确表示的数量。因此,浮点计算的结果必须四舍五入才能回到有限的表象中。这种舍入误差是浮点计算的特点.
以上来自goldberg.html
https://stackoverflow.com/questions/11753853
复制相似问题