2016-10-28 49 views
1

我想將數字舍入到最接近的指定小數。舍入到最接近的指定數字(十進制)

我希望它可以小數.11,.22,.33,.44,.55,.66,.77,.88,但不是.99。相反,0.99應該是1。

例如:

1.14 -> 1.11 
56.75 ->56.77 
34.234 -> 34.22 
1.01 -> 1 (not 1.11) 

的問題是不是四捨五入至小數點後一個具體的數字,它四捨五入到最接近這些小數之一。

我已經試過

(Math.round(parseFloat(number)*10)/9).toFixed(2); 

而且我已經得到了我一直想居多,除1個舍入小數到1.11和0.55例如成爲0.56,我不想要的。加上它超過它應該是,顯然是因爲我乘以10,然後除以9。

回答

4

我建議分開整數部分和小數部分。

如果小數部分接近因子9,則返回整數部分加1,否則返回整數部分加校正的小數部分。

function getRight(v) { 
 
    var i = Math.floor(v), 
 
     f = Math.round((v - i)/0.11);     
 
    return i + (f === 9 || f * 0.11); 
 
} 
 

 
console.log([1.14, 56.75, 34.234, 1.01].map(getRight));

如果負值存在:

function getRight(v) { 
 
    var i = Math[v < 0 ? 'ceil' : 'floor'](v), 
 
     f = Math.round((v - i)/0.11);     
 
    return i + (f === 9 || f * 0.11); 
 
} 
 

 
console.log([1.14, 56.75, 34.234, 1.01].map(getRight)); 
 
console.log([-1.14, -56.75, -34.234, -1.01].map(getRight));