Javascript计算错误

时间:2010-06-29 07:49:51

标签: javascript math

是否有比使用*/更好的方法来乘以和除数?

使用这些操作符的Chrome Firefox和Internet Explorer中存在一种奇怪的行为:

x1 = 9999.8
x1 * 100 = 999979.9999999999
x1 * 100 / 100 = 9999.8
x1 / 100 = 99.99799999999999

http://jsbin.com/ekoye3/

我正在尝试使用parseInt ( x1 * 100 ) / 100向下舍入用户输入,9999.8的结果为9999.79

我应该用另一种方法来实现这个目标吗?

3 个答案:

答案 0 :(得分:7)

这不是错误。您可以查看:

浮点中的整数运算是精确的,因此可以通过缩放来避免十进制表示错误。例如:

x1 = 9999.8;                            // Your example
console.log(x1 * 100);                  // 999979.9999999999
console.log(x1 * 100 / 100);            // 9999.8
console.log(x1 / 100);                  // 99.99799999999999

x1 = 9999800;                           // Your example scaled by 1000
console.log((x1 * 100) / 10000);        // 999980
console.log((x1 * 100 / 100) / 10000);  // 9999.8
console.log((x1 / 100) / 10000);        // 99.998

答案 1 :(得分:1)

您可以使用toFixed()方法:

var a = parseInt ( x1 * 100 ) / 100;
var result = a.toFixed( 1 );

答案 2 :(得分:1)

You may want to check this。如果你想对代表金钱的数字进行计算,你应该计算美分并使用整数。