我知道浮点计算可能不准确。例如:
var x = 100*0.333;
此处x设置为33.300000000000004
而不是33
。这似乎是一个小问题,但如果涉及舍入则会变得严重。例如,Math.ceil(x)
将不正确 - 将产生34
而不是33
。
问题在于我被告知JS在整数和浮点之间没有太大区别。所以,如果有任何方法可以确保整体划分是正确的,我会担心。
JS中整数除法的通常公式似乎是Math.floor(n/m)
,其中n
,m
是整数。现在让我们说m
均匀地划分n
。由于JS将每个数字视为浮点数,n/m
将返回浮点数。如果这个浮点数不精确,但是甚至比实际计算结果小一点,那么Math.floor(n/m)
将向下舍入到它应该低于的整数。
举例说明:例如,如果9/3
产生2.999999999999999
而不是3
,那么Math.floor(9/3)
会错误地产生2
而不是3
}。嗯,实际上,Math.floor(9/3)
确实给出了正确的结果,但这当然只是一个例子;将9
和3
替换为任何不幸的整数选择。
这种情况会发生吗?如果是这样,有没有办法确保结果正确?
答案 0 :(得分:0)
如果需要精确的整数除法结果。然后做
Math.round((m - m%n)/n)