我有数组中的对象:
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
它可以正常工作。
为什么?
答案 0 :(得分:0)
请尝试以下代码
x[0].a.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0]
您可以通过将正则表达式模式从{0, 2}
更改为{0, 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