【问题标题】:Javascript round / floor / toFixed on decimalsJavascript round / floor / toFixed on decimal
【发布时间】:2018-12-02 20:47:56
【问题描述】:

我遇到了 javascript 如何对数字进行除法和舍入的问题。

我有两个浮点数,0.11 和 0.12

我想计算这两个数字的中间值,并将其四舍五入到最接近的最高值,价格为小数点后两位。

例如,如果我在计算器上这样做

0.11+0.12 / 2 = 0.115,我需要将它四舍五入到 0.12,因为它在中间或高于中间。

如果我使用 Javascript 执行此操作,我将无法获得准确的数字

例子,

var high = parseFloat(0.12);
var low = parseFloat(0.11);

var mid = (high + low) / 2;

document.getElementById("demo1").innerHTML = mid;
document.getElementById("demo2").innerHTML = mid.toFixed(2);

var another = mid.toFixed(3);
document.getElementById("demo3").innerHTML =another;

var last = Math.floor(another)
document.getElementById("demo4").innerHTML =last;

http://jsfiddle.net/gzqwbp6c/9/

任何意见将不胜感激。

【问题讨论】:

    标签: javascript floating-accuracy


    【解决方案1】:

    正如0.11499999999999999 所示,结果比0.115 略少。这是因为 0.110.12 无法使用浮点数精确地表示。

    当您不想处理浮点错误时,直接处理整数通常更容易。小整数完全用浮点数表示。

    您可以先乘以 100,然后四舍五入,以确保您的数字是整数,并且只有在得到最终结果后才能除:

    var a = Math.round(100 * parseFloat("0.12"))        // 12
    var b = Math.round(100 * parseFloat("0.11"))        // 11
    
    var mid = (a + b) / 2                               // 11.5.
    // 0.5 can be represented exactly in floating point for small numbers.
    
    var midRound = (Math.round(mid) / 100).toFixed(2)   // "0.12"
    

    【讨论】:

      【解决方案2】:

      需要乘法(在int部分锻炼,即找到mid,然后除法重新转换为原点):

      function myMid(high,low, precision){
       var precision=2
       var convFactor = Math.pow(10,precision);
       return 
          (Math.round((low*convFactor+high*convFactor)/2)/convFactor).toFixed(precision);
      }
      

      float 不精确,你不能依赖它,你会得到意想不到的结果。

      【讨论】:

        【解决方案3】:

        一切*100 以防止不准确

        .toFixed() 进行舍入

        var a = 0.11;
        var b = 0.12;
        c = parseFloat((((a*100) + (b*100))/200).toFixed(2));
        console.log(c);

        【讨论】:

          猜你喜欢
          • 2016-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-03
          • 1970-01-01
          • 2019-05-30
          相关资源
          最近更新 更多