Число округляется через раз toFixed(2)

170
05 июня 2018, 06:50

Есть вот такая функция в React:

export const getTotalPrice = state =>{
        let totalPrice = 0
        state.basket.map((item) => totalPrice = totalPrice +  parseFloat(item.price.toFixed(2)) )
        return totalPrice
    }

По сути я из корзины state.basket узнаю полную стоимость заказа прибавляя каждый раз item.price в переменную totalPrice , числа все ХХ.99, в данном случае 139.99, нажимая на кнопку добавить еще один такой элемент стоимость заказа пересчитывается и в результате сложив 13 раз число 139.99 я получаю $1819.8700000000001.

Что я делаю не так?

Answer 1

Нужно toFixed() применять к результату

totalPrice = (totalPrice + parseFloat(item.price)).toFixed(2) 
Answer 2

Поскольку в двоичной системе невозможно точно представить овердофига дробных чисел, то цены лучше хранить в копейках (-> целые числа) и форматировать при выводе (разделив на 100). Тогда можно сколько угодно раз складывать что угодно и результат всегда будет верным.

READ ALSO
Удаление похожих элементов

Удаление похожих элементов

Подскажите скрипт на удаления дубликатов нод, где ссылки совпадают

177
Создание таблицы определённого размера javafx

Создание таблицы определённого размера javafx

подскажите пожалуйста, как создать таблицу определённого размера(вводит пользователь), после этого пользователь её заполняет, ну а далее...

194