【问题标题】:Rounding to nearest specified number (decimal)四舍五入到最接近的指定数字(十进制)
【发布时间】:2016-10-28 12:03:35
【问题描述】:

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

我希望它四舍五入到小数点 .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 和 .55 例如变成 0.56,这是我不想要的。此外,它比预期的要多,显然是因为我乘以 10 然后除以 9。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    我建议将整数部分和小数部分分开。

    如果小数部分接近因子 9,则返回整数部分加一,否则返回整数部分加上修正后的小数部分。

    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));

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多