我们计算增值税并四舍五入到小数点后2位。仅存储不含增值税的值。重新加载页面时,我们会计算含增值税的价格。
let includingVat = 4000;
let excludingVat = +(includingVat / 121 * 100).toFixed(2);
console.log(+(excludingVat / 100 * 121).toFixed(2));
如您所见,计算值现在增加了一个“分”。我们如何避免这种情况?
答案 0 :(得分:2)
toFixed()
不是舍入函数,而是返回字符串的数字格式化函数。因此,toFixed()
仅用于可视化:
let includingVat = 4000;
let excludingVat = includingVat / 121 * 100;
// ^ + removed ^^^ toFixed() removed
console.log( (excludingVat / 100 * 121).toFixed(2) );
// ^ + removed
输出为:4000.00
。
无论如何,通常用分代替欧元是更好的方法。 (请参阅其他答案)。
答案 1 :(得分:1)
始终以美分存储价格,这样可以避免各种计算中的舍入误差。
如果您收到欧元价格,则乘以100并将其存储
let receivedPriceInEuro = 4000;
let item =
{
price: receivedPriceInEuro*100,
get excludingVAT()
{
return this.price / 12100 * 10000;
},
get displayPrice()
{
return (this.price/100).toFixed(2);
},
get displayPriceExVAT()
{
return (this.excludingVAT/100).toFixed(2);
}
};
console.log(`Price: €${item.displayPrice}, excluding VAT: €${item.displayPriceExVAT}`);