Числовые расчеты в Javascript - PullRequest
0 голосов
/ 09 мая 2018
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 мы теряем точность данных после вычислений.

Как выполняются вычисления на стороне клиента в приложениях электронной коммерции?для поддержания точности

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Для приложений электронной коммерции и финансовых расчетов вы должны увеличивать свои десятичные значения с помощью последовательного множителя и представлять все денежные значения в виде целых чисел. Это нужно для того, чтобы избежать нюансов с математикой с плавающей точкой. В JavaScript у нас есть только тип данных с плавающей точкой для числовых значений, но, к счастью, целочисленная математика для типа данных с плавающей точкой является точной . Поэтому преобразование денежных значений в целые числа (например, 2550 центов вместо 25.50 долларов) решает проблему.

0 голосов
/ 09 мая 2018

У меня есть 2 предложения:

1. используйте функцию toPrecision () для усечения числа с плавающей запятой

Если вы не хотите больших изменений в вашем коде, вы можете попробовать эту функцию:

function truncate(number) {
    return (parseFloat(number).toPrecision(2));
}

2. всегда используйте наименьшую единицу денег для расчета электронной торговли

например. 0,7 доллара = 70 центов, 0,6 доллара = 60 центов

Итак, 0,7 доллара - 0,6 доллара = 70 центов - 60 центов = 10 центов. // даст вам точное значение

0 голосов
/ 09 мая 2018

Я делаю так в моем проекте. Вы можете просто использовать .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().

...