JavaScript乘法不精确

时间:2012-04-03 12:28:53

标签: javascript multiplying

我遇到了一个奇怪的问题,我想做一些基本的数学检查。我已阅读以避免浮动数字,因此我决定乘以 10000 的数学值,因为我的值可以介于0.9和0.0025之间。

除两个值外,一切正常: 0.56和0.57

var result = 0.57 * 10000

结果是: 5699.999999999999 ,我希望5700 !!并且0.56也出错了,但所有其他值都是正确的,我在这里缺少什么?

5 个答案:

答案 0 :(得分:13)

最好的解决方案是使用toFixed(x),并设置x一些小数,这些小数应该总是大于预期的小数结果(我通常把8放在那里)。

但是你应该将结果再次转换回数字,而不是黑客攻击kirilloid-,这样就可以删除任何不需要的小数。之后,在数字上执行您喜欢的任何格式。

所以这将返回所需的结果:

var result = +(0.57 * 10000).toFixed(8)

结果现在 5700

前面的+,将“toFixed”的字符串结果再次转换为数字。

希望有所帮助!

答案 1 :(得分:3)

var result = 0.57 * 10000;
alert (Math.round(result));​

答案 2 :(得分:3)

您在Javascript中的选择(实际上,在大多数语言中)是整数或浮点数。如果你写“0.57”,你就会强迫它进入浮点世界,其精度有限。

如果您想要绝对准确,您需要专门使用整数。

答案 3 :(得分:2)

var multiply = function(a, b) {
    var commonMultiplier = 1000000;

    a *= commonMultiplier;
    b *= commonMultiplier;

    return (a * b) / (commonMultiplier * commonMultiplier);
};

这适用于已知范围。因此,将数字四舍五入到小于commonMultiplier的小数点可能是个好主意。

> multiply(3, .1)
< 0.3
> multiply(5, .03)
< 0.15

答案 4 :(得分:0)

Hacky解决方案:value.toFixed(4).substr(-4).replace(/^0+/, "");