let price: number = 0.7; // $
let discountPrice: number = 0.6; // $
let netPrice: number = price - discountPrice;
console.log(netPrice); // 0.09999999999999998 but not 1 cent
由于IEEE 754标准,我们在计算后会丢失数据精度。
如何在电子商务应用程序中完成客户端计算?保持精确度
答案 0 :(得分:3)
对于电子商务应用程序和财务计算,您应该使用一致的乘数来扩展十进制值,并将所有货币值表示为整数。这是为了避免带有浮点数学的nuances。在JavaScript中,我们只有数值的浮点数据类型,但幸运的是,在浮点数据类型下的整数数学是精确的。因此,将货币值转换为整数(例如,2550
美分而不是25.50
美元)可以解决问题。
答案 1 :(得分:0)
我在我的项目中这样做。您可以使用.toFixed()
let price = 0.7; // $
let discountPrice = 0.6; // $
let netPrice = (price - discountPrice).toFixed(1);
console.log(netPrice); // correct answer
另请在此处查看我的答案:https://stackoverflow.com/a/50056569/631803
Math.round()
无法正常使用,请使用.toFixed()
。
答案 2 :(得分:0)
我有2条建议:
如果您不想对代码进行大的更改,可以尝试以下功能:
function truncate(number) {
return (parseFloat(number).toPrecision(2));
}
E.g。 0.7美元= 70美分,0.6美元= 60美分
所以,0.7美元 - 0.6美元= 70美分 - 60美分= 10美分。 //会给你精确的价值