JS - 数学不正确

JS - Math isn't coming out right

我正在构建一个显示天气并将当前温度从华氏度转换为摄氏度的应用程序。出于某种原因,当转换发生时,数学计算不正确。奇怪的是,点击按钮 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";
  }
}

代码笔:https://codepen.io/abenjamin/pen/ZojJLq

通过一致的乘数按比例放大小数值并将所有数字表示为整数会很有帮助。例如,使用 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 有时是 returns 整数,但有时 returns 小数。

我不建议使用 parseInt 来解决这个问题,因为它会四舍五入小数值并且你会失去精度。