首页 文章

格式编号始终显示2位小数

提问于
浏览
568

我想格式化我的数字,以便始终显示2位小数,在适用的地方进行舍入 .

例子:

number     display
------     -------
1          1.00
1.341      1.34
1.345      1.35

我一直在用这个:

parseFloat(num).toFixed(2);

但它显示 11 ,而不是 1.00 .

26 回答

  • 7

    如果你已经在使用jQuery,你可以看一下使用jQuery Number Format插件 .

    该插件可以将格式化的数字作为字符串返回,您可以设置十进制和千位分隔符,您可以选择要显示的小数位数 .

    $.number( 123, 2 ); // Returns '123.00'
    

    你也可以得到jQuery Number Format from GitHub .

  • 1

    你在寻找地板吗?

    var num = 1.42482;
    var num2 = 1;
    var fnum = Math.floor(num).toFixed(2);
    var fnum2 = Math.floor(num2).toFixed(2);
    alert(fnum + " and " + fnum2); //both values will be 1.00
    
  • 16

    我真的很喜欢:

    var num = 12.749;
    parseFloat((Math.round(num * 100) / 100).toFixed(2)); // 123.75
    

    用2个小数点对数字进行舍入,然后确保用 parseFloat() 解析它以返回Number,而不是String,除非你不关心它是字符串还是数字 .

  • 9
    function number_format(string,decimals=2,decimal=',',thousands='.',pre='R$ ',pos=' Reais'){
      var numbers = string.toString().match(/\d+/g).join([]);
      numbers = numbers.padStart(decimals+1, "0");
      var splitNumbers = numbers.split("").reverse();
      var mask = '';
      splitNumbers.forEach(function(d,i){
        if (i == decimals) { mask = decimal + mask; }
        if (i>(decimals+1) && ((i-2)%(decimals+1))==0) { mask = thousands + mask; }
        mask = d + mask;
      });
      return pre + mask + pos;
    }
    var element = document.getElementById("format");
    var money= number_format("10987654321",2,',','.');
    element.innerHTML = money;
    
    #format{
    display:inline-block;
    padding:10px;
    border:1px solid #ddd;
    background:#f5f5f5;
    }
    
    <div id='format'>Test 123456789</div>
    
  • 1
    var num = new Number(14.12);
    console.log(num.toPrecision(2));//outputs 14
    console.log(num.toPrecision(3));//outputs 14.1
    console.log(num.toPrecision(4));//outputs 14.12
    console.log(num.toPrecision(5));//outputs 14.120
    
  • 13

    你是这个意思吗?

    function showAsFloat(num, n){
          return !isNaN(+num) ? (+num).toFixed(n || 2) : num;
    }
    
    document.querySelector('#result').textContent = 
        [
         'command                      | result',
         '-----------------------------------------------',
         'showAsFloat(1);              | ' + showAsFloat(1),
         'showAsFloat(1.314);          | ' + showAsFloat(1.314),
         'showAsFloat(\'notanumber\')    | ' + showAsFloat('notanumber'),
         'showAsFloat(\'23.44567\', 3)   | ' + showAsFloat('23.44567', 3),
         'showAsFloat(2456198, 5)      | ' + showAsFloat('2456198', 5),
         'showAsFloat(0);              | ' + showAsFloat(0)
        ].join('\n');
    
    <pre id="result"></pre>
    
  • 223

    使用 precision 方法扩展 Math 对象

    Object.defineProperty(Math, 'precision',{
       value: function (value,precision,type){
                 var v = parseFloat(value),
                     p = Math.max(precision,0)||0,
                     t = type||'round';
                  return (Math[t](v*Math.pow(10,p))/Math.pow(10,p)).toFixed(p);
              }
        });
    
    console.log(
        Math.precision(3.1,3), // round 3 digits 
        Math.precision(0.12345,2,'ceil'), // ceil 2 digits
        Math.precision(1.1) // integer part
    )
    
  • 8
    Number(1).toFixed(2);         // 1.00
    Number(1.341).toFixed(2);     // 1.34
    Number(1.345).toFixed(2);     // 1.34 NOTE: See andy's comment below.
    Number(1.3450001).toFixed(2); // 1.35
    
    document.getElementById('line1').innerHTML = Number(1).toFixed(2);
    document.getElementById('line2').innerHTML = Number(1.341).toFixed(2);
    document.getElementById('line3').innerHTML = Number(1.345).toFixed(2);
    document.getElementById('line4').innerHTML = Number(1.3450001).toFixed(2);
    
    <span id="line1"></span>
    
    <span id="line2"></span>
    <span id="line3"></span>
    <span id="line4"></span>
  • 3

    对于现代浏览器,请使用toLocaleString

    var num = 1.345;
    num.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 });
    

    指定区域设置标记作为控制decimal separator的第一个参数 . 对于点,请使用例如英语美国语言环境:

    num.toLocaleString("en-US", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
    

    这使:

    1.35

    欧洲大多数国家/地区使用逗号作为小数点分隔符,因此,例如,如果您使用瑞典语/瑞典语区域设置:

    num.toLocaleString("sv-SE", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
    

    它会给:

    1,35

  • -2

    这里也是一个通用函数,可以格式化为任意数量的小数位:

    function numberFormat(val, decimalPlaces) {
    
        var multiplier = Math.pow(10, decimalPlaces);
        return (Math.round(val * multiplier) / multiplier).toFixed(decimalPlaces);
    }
    
  • 2

    如果 value = 1.005This answer将失败 .

    作为更好的解决方案,可以通过使用以指数表示法表示的数字来避免舍入问题:

    Number(Math.round(1.005+'e2')+'e-2').toFixed(2); // 1.01
    

    图片来源:Rounding Decimals in JavaScript

  • 0
    function currencyFormat (num) {
        return "$" + num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
    }
    
    console.info(currencyFormat(2665));   // $2,665.00
    console.info(currencyFormat(102665)); // $102,665.00
    
  • 3
    (num + "").replace(/^([0-9]*)(\.[0-9]{1,2})?.*$/,"$1$2")
    
  • 0

    圆形到N个位置的更通用的解决方案

    function roundN(num,n){
      return parseFloat(Math.round(num * Math.pow(10, n)) /Math.pow(10,n)).toFixed(n);
    }
    
    
    console.log(roundN(1,2))
    console.log(roundN(1.34,2))
    console.log(roundN(1.35,2))
    console.log(roundN(1.344,2))
    console.log(roundN(1.345,2))
    console.log(roundN(1.344,3))
    console.log(roundN(1.345,3))
    console.log(roundN(1.3444,3))
    console.log(roundN(1.3455,3))
    
    Output
    
    1.00
    1.34
    1.35
    1.34
    1.35
    1.344
    1.345
    1.344
    1.346
    
  • 1

    在进行toFixed()调用之前,我必须在parseFloat()和Number()转换之间做出决定 . 以下是捕获后用户输入的数字格式的示例 .

    HTML:

    <input type="number" class="dec-number" min="0" step="0.01" />
    

    事件处理程序

    $('.dec-number').on('change', function () {
         const value = $(this).val();
         $(this).val(value.toFixed(2));
    });
    

    上面的代码将导致TypeError异常 . 请注意,虽然html输入类型是“number”,但用户输入实际上是“字符串”数据类型 . 但是,只能在Number对象上调用toFixed()函数 .

    我的最终代码如下:

    $('.dec-number').on('change', function () {
         const value = Number($(this).val());
         $(this).val(value.toFixed(2));
    });
    

    我赞成使用Number()与parseFloat()进行强制转换的原因是因为我不必对空输入字符串或NaN值执行额外验证 . Number()函数会自动处理一个空字符串并将其转换为零 .

  • 68
    var number = 123456.789;
    
    
    console.log(new Intl.NumberFormat('en-IN', { maximumFractionDigits: 2 }).format(number));
    

    https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat

  • 4
    var quantity = 12;
    
    var import1 = 12.55;
    
    var total = quantity * import1;
    
    var answer = parseFloat(total).toFixed(2);
    
    document.write(answer);
    
  • 1

    最简单的答案:

    var num = 1.2353453;
    num.toFixed(2); // 1.24
    

    示例:http://jsfiddle.net/E2XU7/

  • 0

    在需要特定格式的地方,您应该编写自己的例程或使用满足您需要的库函数 . 基本的ECMAScript功能通常不足以显示格式化的数字 .

    有关舍入和格式化的详细说明,请访问:http://www.merlyn.demon.co.uk/js-round.htm#RiJ

    作为一般规则,舍入和格式化只应作为输出前的最后一步执行 . 提前执行此操作可能会导致意外的大错误并破坏格式 .

  • 831

    将数字转换为字符串,只保留两位小数:

    var num = 5.56789;
    var n = num.toFixed(2);
    

    n的结果将是:

    5.57
    
  • 11

    parseInt(number * 100) / 100; 为我工作 .

  • -2

    这是另一种仅使用楼层进行舍入的解决方案,这意味着确保计算出的金额不会大于原始金额(有时需要交易):Math.floor(num * 100)/ 100

  • 7

    要获得最准确的舍入,请创建此函数:

    function round(value, decimals) {
        return Number(Math.round(value +'e'+ decimals) +'e-'+ decimals).toFixed(decimals);
    }
    

    并用它来舍入到2位小数:

    console.log("seeked to " + round(1.005, 2));
    > 1.01
    

    感谢Razuthis article和MDN's Math.round reference .

  • 2

    这在FF4中工作正常:

    parseFloat(Math.round(num3 * 100) / 100).toFixed(2);
    

    Live Demo

    var num1 = "1";
    document.getElementById('num1').innerHTML = parseFloat(Math.round(num1 * 100) / 100).toFixed(2);
    
    var num2 = "1.341";
    document.getElementById('num2').innerHTML = parseFloat(Math.round(num2 * 100) / 100).toFixed(2);
    
    var num3 = "1.345";
    document.getElementById('num3').innerHTML = parseFloat(Math.round(num3 * 100) / 100).toFixed(2);
    
    span {
        border: 1px solid #000;
        margin: 5px;
        padding: 5px;
    }
    
    <span id="num1"></span>
    <span id="num2"></span>
    <span id="num3"></span>
    

    请注意,它将 round 到2位小数,因此输入 1.346 将返回 1.35 .

  • 4

    这就是我解决问题的方法:

    parseFloat(parseFloat(floatString).toFixed(2));
    
  • 0

    你没有给我们全面的了解 .

    当我将其粘贴到位置栏上时, javascript:alert(parseFloat(1).toFixed(2)) 在我的浏览器中显示1.00 . 但是,如果你之后做了什么,它将恢复 .

    var num = 2
    document.getElementById('spanId').innerHTML=(parseFloat(num).toFixed(2)-1)
    
    
    shows 1 and not 1.00
    

相关问题