为何对温度转换结果先乘1000再用Math.round处理后除以1000?
解释
const rounded = Math.round(output * 1000) / 1000; 的作用 这段代码的核心目的是把计算后的温度值四舍五入保留三位小数,咱们一步一步拆解来看:
首先,Math.round() 这个方法的作用是把数字四舍五入到最近的整数——比如 Math.round(23.4) 会得到 23,Math.round(23.6) 会得到 24。但如果我们想保留三位小数的四舍五入,直接用它就不行了,因为它只会处理整数位。
那怎么让它能处理三位小数呢?思路就是把小数位“放大”成整数位:
- 先把
output乘以1000,这样原来的三位小数就变成了整数部分。比如如果output是25.6789,乘以1000后就变成了25678.9; - 用
Math.round()对这个放大后的数取整,Math.round(25678.9)会得到25679,这就完成了对第四位小数的四舍五入; - 最后再除以1000,把数值缩回到原来的量级,
25679 / 1000就得到了25.679——这就是我们想要的保留三位小数的结果。
如果不这么做,直接用 Math.round(output),那上面的例子就会得到 26,完全丢失了小数部分的精度,不符合温度转换需要展示精确小数的需求。
另外,这种方法比直接用 toFixed(3) 更可靠一些:toFixed() 会返回字符串,而且在处理某些浮点数时可能出现精度偏差,而先通过乘法-取整-除法的方式得到的是数字类型,再转字符串能避免一些奇怪的精度问题。
内容的提问来源于stack exchange,提问作者user9846482
相关产品推荐
相关产品推荐

