Javascript: почему это производит и уродливая строка ??? Я бы хотел валюту - PullRequest
6 голосов
/ 31 июля 2009
 var total = 0;
        $(".amount").each(function() {
            var value = $(this).val();
            value = (value.length < 1) ? 0 : value;
            var tmp = parseFloat(value).toFixed(2);
            total += tmp;
        });
        $(".total").text(total);

Я пытаюсь перебрать некоторые текстовые поля и суммировать их значения. Это производит неприятную строку. Что мне не хватает ?? если я поставлю 8 в первом текстовом поле, общий текст будет выглядеть как «08.000.000.000.00». Что я делаю неправильно? Я хотел бы отформатировать как валюту, но если нет, то, по крайней мере, просто два десятичных числа. Есть указатели?

Спасибо, ~ ck в Сан-Диего

Ответы [ 3 ]

13 голосов
/ 31 июля 2009

.toFixed преобразует объект из числа в строку.

Оставьте полные значения на месте и конвертируйте только с помощью .toFixed в самом конце

$(".total").text(total.toFixed(2));

Также можно преобразовать строку обратно в число.

total = total + + tmp;
1 голос
/ 31 июля 2009

Просто к вашему сведению, есть отличный плагин математического агрегирования для jQuery: Расчет jQuery

Использование этого плагина также может косвенно решить вашу проблему.

Его использование уменьшит ваш скрипт до:

$('.total').text($('.amount').sum());
0 голосов
/ 31 июля 2009

Вы конвертируете parseFloat в строку, а затем добавляете ее к общему числу. Добавляйте .toFixed (2) только в последнюю строку, как только все будет добавлено.

var total = 0;
$(".amount").each(function() {
    var value = $(this).val();
    value = (value.length < 1) ? 0 : value;
    var tmp = parseFloat(value);
    total += tmp;
});
$(".total").text(total).toFixed(2);
...