首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS说得不对

JS说得不对
EN

Stack Overflow用户
提问于 2018-05-15 16:06:46
回答 1查看 187关注 0票数 3

我正在构建一个应用程序来显示天气,并将当前的温度从华氏转换为摄氏。由于某种原因,当转换发生时,数学不正确。奇怪的是,在按了5-6次按钮后,它就开始正常工作了。

我最好的猜测是,我对parseInt()做了一些错误的事情,或者一个变量没有被更新。

有什么想法?

代码语言:javascript
复制
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";
  }
}

CodePen:https://codepen.io/abenjamin/pen/ZojJLq

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-15 16:39:00

用一个一致的乘数将你的十进制值放大,并将所有的数字表示为整数是很有帮助的。例如,使用806度而不是80.6度(乘以10)来计算温度。这是为了避免使用浮点数学的nuances。在JavaScript中,我们只有数值的浮点数据类型,但幸运的是,浮点数据类型下的整数数学是精确的。因此,将十进制值放大到整数(例如,2550度而不是25.50度数)可以解决这个问题。

例如(从华氏转换为摄氏):

代码语言:javascript
复制
console.log((80.6-32) * 5 / 9); // outputs 26.999999999999996

经下列更正后:

代码语言:javascript
复制
console.log((806-320) * 5 / 9 / 10 ); // outputs 27

您的计算器有时工作正常的原因是温度API有时返回整数,而另一些时候则返回十进制值。

我不建议使用parseInt来解决这个问题,因为它将舍入十进制值,您将失去精度。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50354723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档