Полезно увеличить ваши десятичные значения последовательным множителем и представить все числа в виде целых чисел.Например, используйте 806
градус вместо 80.6
градус (умножьте на 10) для расчета температуры.Это нужно для того, чтобы избежать нюансов с математикой с плавающей точкой.В JavaScript у нас есть только тип данных с плавающей точкой для числовых значений, но, к счастью, целочисленная математика для типа данных с плавающей точкой является точной .Поэтому увеличение десятичных значений до целых чисел (например, 2550
градусов вместо 25.50
градусов) решает проблему.
Например (преобразование в градусы Фаренгейта в Цельсий):
console.log((80.6-32) * 5 / 9); // outputs 26.999999999999996
Исправлено с помощью:
console.log((806-320) * 5 / 9 / 10 ); // outputs 27
Причина, по которой ваш калькулятор иногда работает правильно, но не в других случаях, заключается в том, что API температуры иногда возвращает целые числа, а в других случаях возвращает десятичные значения.
Я бы не рекомендовалиспользуйте parseInt
для решения этой проблемы, потому что он округлит десятичные значения, и вы потеряете точность.