首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript:为什么58 * 0.1 = 5.800000000000001 (而不是5.8)

JavaScript:为什么58 * 0.1 = 5.800000000000001 (而不是5.8)
EN

Stack Overflow用户
提问于 2012-08-01 06:41:18
回答 2查看 160关注 0票数 0

可能重复: JavaScript的数学坏了吗?

...and,我能做些什么来反对它?计算之后,我希望得到结果的字符串表示。正因为如此,零(加上1)才会被去除。"toFixed()“不是一个完美的解决方案,因为我希望有所有的(正确的)小数的潜在结果,我不知道结果(和小数)之前。因此,上面所示的计算只是一个例子。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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),一台计算机不能用有限的位来表示,所以计算机正尽可能地接近它。

票数 2
EN

Stack Overflow用户

发布于 2012-08-01 06:47:35

将无限多个实数压缩到有限的位数需要近似表示。虽然有无限多的整数,但在大多数程序中,整数计算的结果可以存储在32位。相反,在给定任何固定位数的情况下,大多数实数计算都会产生无法用那么多位精确表示的数量。因此,浮点计算的结果必须四舍五入才能回到有限的表象中。这种舍入误差是浮点计算的特点.

以上来自goldberg.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11753853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档