![]() |
1
3
因为你在10垒工作。IEEE-754双精度二进制浮点工作于二进制(基2)。例如,在这种表述中,
正如你从我上面的陈述中看到的,即使是十分之一,你也会遇到不精确的数字,而不必去到令人不快的值(就像你得到9007199254740993这样不可表示的整数一样)。因此著名
不使用内置浮点。您可能只使用整数(因为它们从-9007199254740992到9007199254740992是可靠的),然后在输出时插入相关的小数。您可能会发现这个问题的答案很有用: How to deal with floating point number precision in JavaScript? .
你可能想知道为什么,如果
|
![]() |
2
1
这是因为 二元的 浮点表示。取0.8、0.4、0.2和0.1的值作为双精度值。它们实际存储的值是:
正如您很容易看到的,每次将数字减半时,与精确的十进制值的差就减半。这是因为所有这些都有完全相同的意义,并且只有不同的指数。如果你看他们的十六进制表示,这就更清楚了:
所以
差异
在实际的、数学的值和实际存储的值之间的某个位置在最后一个位之内或之下。指数越低,该位的值越小。从另一个角度看:1.6是
如果你把 十进制的 关键是,你实际上改变了 二元的 指数也是。不完全是成比例的,因为我们处理的是不同的基数,但基本上是“等价的”(如果这是一个恰当的词)。数字越高,指数越高,因此数学值和浮点值之间的差值越大。 |
![]() |
3
0
不是一个答案,而是一个长的评论。 数量级不是有罪的,因为浮点表示将数字标准化为1到2之间的尾数:
指数分别处理。 |
![]() |
code-geek · Jquery根据单选按钮选择隐藏或显示文本字段 5 月前 |
![]() |
Alex · 在轻量级中同时解构和不解构变量 5 月前 |
![]() |
Ângelo Rigo · ReactJS映射:如何迭代[关闭] 5 月前 |
![]() |
bairog · 从按属性筛选的对象数组字典中创建值数组 5 月前 |
![]() |
lokiuucx · JS对象属性返回未定义,尽管对象属性应该有值 6 月前 |