2016-11-14 27 views
-2

我有對象在數組:的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就好。

這是爲什麼?

+0

那麼,你如何來剔除那些討厭的0s「顯示」你的價值觀? – usr2564301

+0

「Works fine」意思是什麼? – 2016-11-14 12:27:30

+1

不,問題沒有**沒有說明答案應該是2.9。它在哪裏陳述?你對「round」這個詞的含義有何理解? – 2016-11-14 13:34:50

回答

0

請嘗試下面的代碼

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

可以通過更改正則表達式行話四捨五入至1從{0, 2}{0, 1}

+2

不,不要使用正則表達式來進行數字算術或格式化。 – 2016-11-14 12:29:56

+0

因爲在這種情況下,我們需要打印該值,將其轉換爲字符串,然後應用正則表達式來過濾內容看起來不錯,但請讓我知道是否有任何缺點。我會很樂意糾正我的回答 – S4beR

+0

你爲什麼認爲OP報告的問題存在? – 2016-11-14 12:41:09

0

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)

+0

'parseInt'旨在將字符串解析爲整數,而不是舍入。無論如何,你的'roundToTenth'例程不輪,它會截斷。 – 2016-11-14 12:54:51

+0

而且我們不知道在某些點的輸入中可能沒有像「2.99」這樣的字符串? – mike510a

+0

你沒有在輸入上運行'parseInt'。你正在運行一個數字,這是乘以十的結果。下面發生的事情是'inputVal * 10'將被轉換爲字符串,然後運行'parseInt'。 – 2016-11-14 12:56:56