是否有比使用*
和/
更好的方法来乘以和除数?
使用这些操作符的Chrome Firefox和Internet Explorer中存在一种奇怪的行为:
x1 = 9999.8
x1 * 100 = 999979.9999999999
x1 * 100 / 100 = 9999.8
x1 / 100 = 99.99799999999999
我正在尝试使用parseInt ( x1 * 100 ) / 100
向下舍入用户输入,9999.8
的结果为9999.79
我应该用另一种方法来实现这个目标吗?
答案 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。如果你想对代表金钱的数字进行计算,你应该计算美分并使用整数。