Добавление десятичного значения не работает, возвращается строка - PullRequest
1 голос
/ 27 июля 2011

Я хочу сделать некоторые математические операции, такие как плюс, минус и т. Д. С десятичными значениями.

Итак, я написал две функции;

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 ]

5 голосов
/ 27 июля 2011

Вам нужно добавить + перед этим оператором, и все в порядке:

return +$dec.toFixed(2);

Это преобразует строку в число.Если строка не может быть преобразована, она вернет значение NaN.

0 голосов
/ 27 июля 2011

Метод 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.

См:

0 голосов
/ 27 июля 2011

Вместо:

return $dec.toFixed(2);

Do:

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