【问题标题】:Always display at least two decimal places始终显示至少两位小数
【发布时间】:2013-12-09 15:11:33
【问题描述】:

我想格式化一个数字,使其始终至少有两位小数。

样本:

1
2.1
123.456
234.45

输出:

1.00
2.10
123.456
234.45

【问题讨论】:

标签: javascript decimal


【解决方案1】:

使用Intl 怎么样:

Intl.NumberFormat(navigator.language, {
  minimumFractionDigits: 2,
  maximumFractionDigits: 10,
}).format(num)

【讨论】:

    【解决方案2】:

    您可以固定为 2 或当前位置的计数;

     var result = num.toFixed(Math.max(2, (num.toString().split('.')[1] || []).length));
    

    【讨论】:

      【解决方案3】:

      试试这个解决方案(工作),

      var a= 1,
          b= 2.1,
          c = 123.456,
          d = 234.45;
      
      console.log(a.toFixed(4).replace(/0{0,2}$/, ""));
      console.log(b.toFixed(4).replace(/0{0,2}$/, ""));
      console.log(c.toFixed(4).replace(/0{0,2}$/, ""));
      console.log(d.toFixed(4).replace(/0{0,2}$/, ""));
      

      如果您有更多小数位,您可以轻松更新数字。

      【讨论】:

      • 这是最多 4 位小数,这不能解决问题。
      • 请看答案的最后一行。您可以将其更改为任意小数位,例如。 c.toFixed(10).replace(/0{0,8}$/, "") 第一个数字是我们可以拥有的最大小数位数(在这种情况下为 10),第二个数字是 max-min(在这种情况下为 8)。
      • Alex K. 答案更好,因为它没有设置最大小数位。
      【解决方案4】:

      试试这个:

      var num = 1.2;
      function decimalPlaces(num) {
        var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
        if (!match) { return 0; }
        return Math.max(
             0,
             // Number of digits right of decimal point.
             (match[1] ? match[1].length : 0)
             // Adjust for scientific notation.
             - (match[2] ? +match[2] : 0));
      }
      if(decimalPlaces(num) < 2){
         num = num.toFixed(2);
      }
      alert(num);
      

      这里是jsfiddle

      【讨论】:

      • 输出是1.23,我想要1.2345
      • 请再试一次!对不起我的错误。
      猜你喜欢
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      相关资源
      最近更新 更多