JavaScript数学.round:不将对象四舍五入到十进制的1

JavaScript Math.round: Doesnt round object to 1 decimal

本文关键字:四舍五入 十进制 对象 数学 round JavaScript      更新时间:2023-09-26

我在数组中有对象:

x[{a=2.99, b=5.11}{a=4.99, b=2.11}]

我希望它显示1十进制与数学四舍五入,因为我使用Math.round(x[0].a*10)/10;它显示3,而它工作良好,如果我只使用数字作为Math.round(2.99*10)/10

为什么?

请尝试下面的代码

x[0].a.toString().match(/^-?'d+(?:'.'d{0,2})?/)[0]

您可以通过将正则表达式模式从{0, 2}更改为{0, 1}来舍入到1

这可能行得通——Math.floor()toFixed(1)是这里的关键…舍入将导致原始输入变为最接近的整数。

    function roundToTenth(inputVal) {
      return Math.floor(inputVal * 10) * 0.1;
    }
    
    console.log(roundToTenth(2.99).toFixed(1));

除法通常比乘法慢-使用正则表达式匹配肯定会比乘法慢....

我在上面的代码中所做的就是说"把数字乘以10,然后把它变成一个没有小数的直整数,


2.99 * 10 = 29.9变成29

最后,由于我使用* 0.1操作,它变成了一个像2.900000004一样的浮点数,我使用toFixed(1)来去除所有那些烦人的0s在末尾