【问题标题】:Show numbers to second nearest decimal显示数字到第二个最接近的小数
【发布时间】:2014-01-09 18:10:16
【问题描述】:

我对 Javascript 很陌生,所以请多多包涵。

我有这个加起来的函数。如何使它显示最接近的两位小数而不是没有小数位?

function calcProdSubTotal() {

    var prodSubTotal = 0;

    $(".row-total-input").each(function() {

         var valString = $(this).val() || 0;

        prodSubTotal += parseInt(valString);

    });

    $("#product-subtotal").val(CommaFormatted(prodSubTotal));

}

谢谢!

编辑:根据要求:逗号格式:

function CommaFormatted(amount) {

    var delimiter = ","; 
    var i = parseInt(amount);

    if(isNaN(i)) { return ''; }

    i = Math.abs(i);

    var minus = '';
    if (i < 0) { minus = '-'; }

    var n = new String(i);
    var a = [];

    while(n.length > 3)
    {
        var nn = n.substr(n.length-3);
    a.unshift(nn);
    n = n.substr(0,n.length-3);
}

if (n.length > 0) { a.unshift(n); }

n = a.join(delimiter);

amount = "$" + minus + n;

return amount;

}

【问题讨论】:

  • 你能告诉我们你正在运行它的CommaFormatted函数吗?
  • 我用 CommaFormatted 编辑了我的问题
  • 很高兴您向我们展示。它也需要一些改变。
  • 我想指出这不是我写的脚本。这是我从 css-tricks css-tricks.com/multi-product-quantity-based-order-form得到的东西@
  • @crush 请注意上述评论。我一直在弄乱脚本以使其显示小数,但不会。你能给我一个答案吗?谢谢!

标签: javascript jquery


【解决方案1】:

好吧,parseInt 解析整数,所以你可以摆脱任何小数。使用parseFloat

例如

parseFloat('10.599').toFixed(2); //10.60

您可能还想将您的 commaFormatted 函数更改为:

function commaFormatted(amount) {
    if (!isFinite(amount) || typeof amount !== 'number') return '';

    return '$' + amount.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
}


commaFormatted(0); //$0.00
commaFormatted(1.59); //$1.59
commaFormatted(999999999.99); //$999,999,999.99

【讨论】:

  • 她的CommaFormatted 函数也执行parseInt。看起来小数也会搞砸CommaFormatted 函数。
  • 如何更改 CommaFormatted 以不截断任何小数?
  • @Tara 将 parseInt 更改为 CommaFormatted 会有所帮助,但是您添加小数的算法将会被抛弃。你应该使用regular expression to comma format it
  • 逗号代替点肯定是本地化问题,将由.toFixed()自动处理?
【解决方案2】:

用于函数toFixed(2)

2 是一个整数参数,表示使用 2 个小数点,假设您的逗号格式代码不会将其转换为字符串。 (如果是,请在格式化之前修复小数)

$("#product-subtotal").val(CommaFormatted(parseFloat(prodSubTotal).toFixed(2)));

记住parseFloat 因为val() 可能是一个字符串!`

【讨论】:

    【解决方案3】:

    您正在寻找toFixed()。它采用一个参数digits。参数记录如下:

    小数点后出现的位数;这可以是 0 到 20 之间的值,包括 0 和 20,并且实现可以选择支持更大范围的值。如果省略此参数,则将其视为 0。

    还要注意parseInt() 解析整数,截断您可能拥有的任何小数。 parseFloat() 将按预期保留小数。

    【讨论】:

    • 您假设这个CommaFormatted 函数不会与此有关。它可能不会,所以它可能会正常工作。
    【解决方案4】:

    我解决了我的问题。我只是改变了:

     $("#product-subtotal").val(CommaFormatted(prodSubTotal));
    

      $("#product-subtotal").val(prodSubTotal);
    

    正如我在 cmets 中所述,这不是我编写的脚本。这是 Chris Coyier 写的脚本,我只是想修改它。我想我不需要使用 CommaFormatted 来达到我的目的?

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      相关资源
      最近更新 更多