JavaScript Math.round:不将对象舍入为1十进制

时间:2016-11-14 12:19:12

标签: javascript rounding

我有数组中的对象:

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它可以正常工作。

为什么?

2 个答案:

答案 0 :(得分:0)

请尝试以下代码

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

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

来舍入为1

答案 1 :(得分:0)

这可能有效 - 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