Рассчитать цену с учетом и без учета НДС в обоих случаях, сохраняя один и тот же результат - PullRequest
0 голосов
/ 10 июля 2019

Мы рассчитываем НДС и округляем до 2 десятичных знаков.Сохраняется только значение, исключающее НДС.При перезагрузке страницы мы рассчитываем цену с НДС.

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

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

Как видите, вычисленное значение теперь имеет добавленный 'цент'.Как мы этого избежать?

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

toFixed() не является функцией округления, но это функция форматирования чисел, которая возвращает строку. Поэтому используйте toFixed() только для визуализации:

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

И вывод: 4000.00.

В любом случае, лучше использовать цент вместо евро. (см. другие ответы).

1 голос
/ 10 июля 2019

Всегда храните цены в центах, это позволит избежать ошибок округления при различных расчетах.

Если вы получите цену в евро, умножьте ее на 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}`);
...