Почему parseFloat() так радикально меняет результат вычислений JavaScript? [закрыто]Javascript

Форум по Javascript
Ответить
Anonymous
 Почему parseFloat() так радикально меняет результат вычислений JavaScript? [закрыто]

Сообщение Anonymous »

Я столкнулся со странным поведением при вычислении JavaScript: результат сильно меняется в зависимости от того, использую ли я parseFloat() или нет.
Вот код с 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»