代码之家  ›  专栏  ›  技术社区  ›  Matthew Hegarty Edwin Lunando

JavaScript舍入函数中的硬编码8191 10485值

  •  6
  • Matthew Hegarty Edwin Lunando  · 技术社区  · 16 年前

    function roundNumber(num,dec) {
        var newnumber = 0;
        if (num > 8191 && num < 10485) {
            num = num-5000;
            newnumber = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
            newnumber = newnumber+5000;
        } else {
            newnumber = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
        }
        return newnumber;
    }
    
    2 回复  |  直到 16 年前
        1
  •  2
  •   tadman    16 年前

    我敢打赌,这是一种解决浮点舍入错误的方法。浮点数可能以不可预知的方式运行,例如,您期望的是2,但得到的却是1.99999973904,比较结果如>=2失败。

        2
  •  1
  •   kennebec    16 年前
    function roundNumber(num, dec){
     var newnumber= 0;
     if(num> 8191 && num < 10485){
      num= num-5000;
      newnumber= Math.round(num*Math.pow(10, dec))/Math.pow(10, dec);
      newnumber= newnumber+5000;
     }
     else{
      newnumber= Math.round(num*Math.pow(10, dec))/Math.pow(10, dec);
     }
     return newnumber;
    }
    

    你确定这是针对javascript的吗?

    如果您有一个号码(n=10449.012345)

    你想把它四舍五入到5位小数(dec=5), 返回10449.01234。

    使用roundNumber(10449.012345,5) 返回10449.0123400000001, 这似乎不是一个进步。 10000.12返回10000.11999999999。

    10000确实返回10000,所以我想你可以放心地用它来取整整数。