如何确保整数除法可以得出正确的结果?

时间:2015-08-26 20:07:24

标签: javascript floating-accuracy integer-division

我知道浮点计算可能不准确。例如:

var x = 100*0.333;

此处x设置为33.300000000000004而不是33。这似乎是一个小问题,但如果涉及舍入则会变得严重。例如,Math.ceil(x)将不正确 - 将产生34而不是33

问题在于我被告知JS在整数和浮点之间没有太大区别。所以,如果有任何方法可以确保整体划分是正确的,我会担心。

JS中整数除法的通常公式似乎是Math.floor(n/m),其中nm是整数。现在让我们说m均匀地划分n。由于JS将每个数字视为浮点数,n/m将返回浮点数。如果这个浮点数不精确,但是甚至比实际计算结果小一点,那么Math.floor(n/m)将向下舍入到它应该低于的整数。

举例说明:例如,如果9/3产生2.999999999999999而不是3,那么Math.floor(9/3)会错误地产生2而不是3 }。嗯,实际上,Math.floor(9/3)确实给出了正确的结果,但这当然只是一个例子;将93替换为任何不幸的整数选择。

这种情况会发生吗?如果是这样,有没有办法确保结果正确?

1 个答案:

答案 0 :(得分:0)

如果需要精确的整数除法结果。然后做

Math.round((m - m%n)/n)