【问题标题】:Decimal Value addition not working, returning string十进制值加法不起作用,返回字符串
【发布时间】:2011-07-27 13:42:38
【问题描述】:

我想用十进制值做一些数学运算,例如加号、减号等。

所以我写了两个函数;

function to_decimal(i){
    var $dec = parseFloat(i);
    return $dec.toFixed(2);
}

function calc_price(){
    var $t = $('#sub_total .total').text();
    var $total = to_decimal($t);

    $('#price_list ul li').each(function(){
        var $p = to_decimal($(this).find('.item_price').text());
        $total = $total + $p;
    });

    $t = $('#sub_total .total').text($total);
}

但我认为这些函数无法正常工作,因为结果返回的字符串如 0.0010.30

问题出在哪里?

【问题讨论】:

    标签: javascript jquery floating-point decimal


    【解决方案1】:

    您需要在该语句前面添加一个+ 就可以了:

    return +$dec.toFixed(2);
    

    这会将字符串转换为数字。如果字符串无法转换,它将返回 NaN 值。

    【讨论】:

    • 作为等效的替代方案,我经常使用$dec.toFixed(2) * 1 代替(乘以一)。我觉得我以后更有可能注意到我的意图; + 不容错过。
    【解决方案2】:

    代替:

    return $dec.toFixed(2);
    

    做:

    return Math.round($dec*100)/100;
    

    【讨论】:

      【解决方案3】:

      toFixed 方法返回一个字符串。任何不影响输出的数学运算都可用于将字符串转换为数字(加法除外,其运算符不幸地兼作字符串连接运算符):

      $dec.toFixed(2) - 0 
      $dec.toFixed(2) / 1 
      $dec.toFixed(2) * 1
      +$dec.toFixed(2)
      

      这些是最快的方法。但是,如果速度不是问题(在执行少量操作时可能不是问题),那么将字符串转换为数字的最清晰、最易读的方法是 Number 构造函数:

      Number($dec.toFixed(2))
      

      编辑:上述性能信息可能不再普遍适用。 Number 构造函数确实比 IE 7.0 和 Firefox 5 中的每个替代方法慢得多,但实际上在 Chrome 12.0.742 中表现最好。

      见:

      【讨论】:

      • 谢谢。我从你的帖子中学到了一些东西。但是 jAndy 的反应很好。
      猜你喜欢
      • 2021-01-21
      • 1970-01-01
      • 2018-01-16
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 2020-07-09
      相关资源
      最近更新 更多