Вот код с parseFloat():
Код: Выделить всё
parseFloat(result['data2']["ft_licen"]) * (
(
(parseFloat(result['data2']["qt_hora"]) * parseFloat(result['data2']["vl_hora_tec"])) *
(parseFloat(result['data2']["vl_fixo"]) +
(parseFloat(result['data2']["ft_ajuste"]) *
(parseFloat(result['data2']["ft_complex"]) * parseFloat(result['fator_w"])) *
(Math.sqrt(parseFloat(result['azul_area_nova'])))))
) * parseFloat(result['data2']["ft_porte"])
)
1190.0412472223727
Но когда я удаляю явные преобразования parseFloat():
Код: Выделить всё
result['data2']["ft_licen"] * (
(
(result['data2']["qt_hora"] * result['data2']["vl_hora_tec"]) *
(result['data2']["vl_fixo"] +
(result['data2']["ft_ajuste"] *
(result['data2']["ft_complex"] * result['fator_w"]) *
(Math.sqrt(result['azul_area_nova']))))
) * result['data2']["ft_porte"]
)
73186.10824722236
Оба фрагмента должны давать одинаковый результат, но это не так.
Кажется, разница зависит от того, где и когда я применяю parseFloat().
Что я проверил:
Все значения берутся из объекта JSON (result['data2']).
Поля представляют собой строки, например «1,25» или «10,5».
Некоторые имеют дополнительные пробелы или используют запятые в качестве десятичных разделителей.
Вычисления включают в себя многократное умножение и Math.sqrt().
Мой вопрос:
Почему использование (или неиспользование) parseFloat() вызывает такую большую разницу?
Разве JavaScript не должен автоматически преобразовывать строковые значения в числа в математические операции?
И какой самый чистый и безопасный способ убедиться, что все значения обрабатываются как числа, без вызова parseFloat() для каждого поля вручную?
Подробнее здесь: https://stackoverflow.com/questions/798 ... rastically
Мобильная версия