javascript - 为什么 230/100*100 不返回 230?

标签 javascript parseint decimal

<分区>

Possible Duplicate:
Is JavaScript’s Math broken?

在 Javascript 中,我不明白为什么 230/100*100 返回 229.99999999999997,而 240/100*100 返回 240.

这也适用于 460、920 等等...

有什么解决办法吗?

最佳答案

问题:

230/100*100

= (230 / 100) * 100
= 2.3 * 100 in binary

2.3 二进制是循环十进制:10.01001100110011001100110011001100...

由于精度有限,这个循环小数无法准确表示,我们得到类似2.29999999981373548507...


有趣的是,如果您选择这样的除法运算,它可以准确表示(不是循环小数,并且所有数字都在 FP 标准所容纳的最大有效数字范围内) 在二进制文件中,您不会看到任何此类差异。

例如225/100*100 = 225

2.25 二进制为 10.01

Test Conversion: Binary to/from Decimal


处理:

在检查浮点值之间的相等性时,始终注意精度。向上/向下舍入到一定数量的有效数字是一种很好的做法。

关于javascript - 为什么 230/100*100 不返回 230?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13248173/

相关文章:

javascript - 如何安全地将 HTML 从模型绑定(bind)到 View

javascript - Angular - 创建对象映射

javascript - 避免前瞻正则表达式中的长模式重复 - 如何简化?

java - 1000位的字符串,使用substring方法在没有数组的情况下找到最大的5位

java - 处理 Double In 计算(Java)

swift - 将整数写成十六进制、八进制和二进制有什么意义?

javascript - Google 表格 API v4 : Add named or protected ranges

java - 数字格式异常 : Invalid int as a result of converting string containing binary digita to decimal

Java:Java 思维第四版。为什么要在这里使用十六进制?

java - 最后出现在 1 之后的数字 '0' 在从十进制数转换时会丢失在二进制数中