两种方式计算价格(包括和不包括增值税),以保持相同的结果

时间:2019-07-10 14:58:51

标签: javascript formula

我们计算增值税并四舍五入到小数点后2位。仅存储不含增值税的值。重新加载页面时,我们会计算含增值税的价格。

let includingVat = 4000;
let excludingVat = +(includingVat / 121 * 100).toFixed(2);

console.log(+(excludingVat / 100 * 121).toFixed(2));

如您所见,计算值现在增加了一个“分”。我们如何避免这种情况?

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}`);