Я создаю приложение, которое отображает погоду и преобразует текущую температуру из Фаренгейта в Цельсия. По какой-то причине, когда происходит преобразование, математика получается неверной. Как ни странно, после 5-6 нажатий на кнопку начинает работать корректно.
Я думаю, что я делаю что-то не так с parseInt() или, возможно, переменная не обновляется.
Мысли?
function toggleUnits(){
if (wUnit.innerHTML == "C"){
var oldTemp = parseInt(wTemp.innerHTML, 10),
newTemp = oldTemp * 9 / 5 + 32;
wTemp.innerHTML= newTemp;
wUnit.innerHTML = "F";
unitToggle.innerHTML = "Switch to Celsius";
}else{
var oldTemp = parseInt(wTemp.innerHTML, 10),
newTemp = (oldTemp-32) * 5 / 9;
wTemp.innerHTML= newTemp;
wUnit.innerHTML = "C";
unitToggle.innerHTML = "Switch to Fahrenheit";
}
}
Кодовое перо у меня правильно конвертирует.
@Clint - Даже после загрузки данных?
Теперь он не горит, и я думаю, вам нужно узнать о stackoverflow.com/questions/588004/…
ObLink: docs.sun.com/source/806-3568/ncg_goldberg.html
@AaronBenjamin А, нет. Я инстинктивно нажимаю «Заблокировать» в этих уведомлениях.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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