我有對象在數組:的JavaScript Math.round:犯規圓形物體到1位小數
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
就好。
這是爲什麼?
我有對象在數組:的JavaScript Math.round:犯規圓形物體到1位小數
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]
可以通過更改正則表達式行話四捨五入至1從{0, 2}
到{0, 1}
不,不要使用正則表達式來進行數字算術或格式化。 – 2016-11-14 12:29:56
因爲在這種情況下,我們需要打印該值,將其轉換爲字符串,然後應用正則表達式來過濾內容看起來不錯,但請讓我知道是否有任何缺點。我會很樂意糾正我的回答 – S4beR
你爲什麼認爲OP報告的問題存在? – 2016-11-14 12:41:09
Thiss可能的工作 - 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)
末
'parseInt'旨在將字符串解析爲整數,而不是舍入。無論如何,你的'roundToTenth'例程不輪,它會截斷。 – 2016-11-14 12:54:51
而且我們不知道在某些點的輸入中可能沒有像「2.99」這樣的字符串? – mike510a
你沒有在輸入上運行'parseInt'。你正在運行一個數字,這是乘以十的結果。下面發生的事情是'inputVal * 10'將被轉換爲字符串,然後運行'parseInt'。 – 2016-11-14 12:56:56
那麼,你如何來剔除那些討厭的
0s
「顯示」你的價值觀? – usr2564301「Works fine」意思是什麼? – 2016-11-14 12:27:30
不,問題沒有**沒有說明答案應該是2.9。它在哪裏陳述?你對「round」這個詞的含義有何理解? – 2016-11-14 13:34:50