克服Javascript浮点问题

克服Javascript浮点问题,javascript,Javascript,我知道小数点的最大位数是5。是否有办法确保消除所有舍入错误 编辑:我得到了一些反对票,所以我想进一步澄清这个问题 我知道最大小数点是5,因为我知道数据库不可能返回超过5位小数的浮点 没有任何牵连。这是一个浮子 我不想使用precision库,因为它太重,无法包含一个库来修复前端的小bug 我想知道我是否使用Math.round,我仍然会有问题。例如,这里的bug是1.164变为1.1639999,所以我可以通过四舍五入来解决这个问题,但是1.164是否可能变为1.6400000001。在这种情况

我知道小数点的最大位数是5。是否有办法确保消除所有舍入错误

编辑:我得到了一些反对票,所以我想进一步澄清这个问题

我知道最大小数点是5,因为我知道数据库不可能返回超过5位小数的浮点

没有任何牵连。这是一个浮子

我不想使用precision库,因为它太重,无法包含一个库来修复前端的小bug

我想知道我是否使用Math.round,我仍然会有问题。例如,这里的bug是1.164变为1.1639999,所以我可以通过四舍五入来解决这个问题,但是1.164是否可能变为1.6400000001。在这种情况下,如果我四舍五入,将其四舍五入到116401

使用Math.round:


它将为您提供116400。是的,有一些方法可以确保消除所有舍入错误

使用不同的语言

正如评论员提到的,使用定点或高精度库

使用一个新的不存在的JS实现,它以不同的方式表示数字,比如Crockford的DEC64方案;看


你从哪里知道小数点后的最大位数是5?15岁更为常见。例如,在Chrome中,1.23456789012345+3.14159265358979323846264338327950288419716939937510582097494459230=4.376160543713243。您需要使用parseFloat来获得精度。此外,这是一个太宽泛的问题。这里有精确的数学库,但用词来说,这个问题太宽泛了,无法在这里得到一个好的答案。OP不是舍入误差的例子,它表明IEEE 754浮点值的精度不足。你到底想实现什么?这些数字是什么?你为什么要比较它们?
parseInt(1.164 * 100000) === 116399
Math.round(1.164 * 100000)