我正在构建一个应用程序来显示天气,并将当前的温度从华氏转换为摄氏。由于某种原因,当转换发生时,数学不正确。奇怪的是,在按了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";
}
}发布于 2018-05-15 16:39:00
用一个一致的乘数将你的十进制值放大,并将所有的数字表示为整数是很有帮助的。例如,使用806度而不是80.6度(乘以10)来计算温度。这是为了避免使用浮点数学的nuances。在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来解决这个问题,因为它将舍入十进制值,您将失去精度。
https://stackoverflow.com/questions/50354723
复制相似问题