舍入到最接近的指定数字(十进制)

时间:2016-10-28 12:03:35

标签: javascript

我正在尝试将数字四舍五入到最接近的指定小数。

我希望它舍入到小数.11,。22,.33,.44,.55,.66,.77,.88但不是.99。相反,.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和.55例如变成了.56,我不想要。加上它比预期的要多,显然是因为我乘以10再除以9。

1 个答案:

答案 0 :(得分: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));