2016-10-28 163 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));