十进制值添加不起作用,返回字符串

时间:2011-07-27 13:42:38

标签: javascript jquery floating-point decimal

我想做一些数学,如加号,减号等,带小数值。

所以我写了两个函数;

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

问题出在哪里?

3 个答案:

答案 0 :(得分:5)

您需要在该声明前添加+并且您没事:

return +$dec.toFixed(2);

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

答案 1 :(得分:0)

而不是:

return $dec.toFixed(2);

执行:

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

答案 2 :(得分:0)

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中表现最佳。

请参阅: