我正在构建一个显示天气的应用程序,并将当前温度从华氏温度转换为摄氏温度。出于某种原因,当转换发生时,数学运算不正确。奇怪的是,点击按钮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";
}
}
答案 0 :(得分:4)
通过一致的乘数来缩放十进制值并将所有数字表示为整数是有帮助的。例如,使用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
来解决此问题,因为它会舍入十进制值并且您将失去精确度。