2014-01-09 3 views
0

Я очень новичок в Javascript, поэтому, пожалуйста, несите меня.Показать номера до второго ближайшего десятичного знака

У меня есть эта функция, которая суммирует общую сумму. Как я могу сделать это так, чтобы он показывал ближайшие два десятичных знака вместо десятичных знаков?

function calcProdSubTotal() { 

    var prodSubTotal = 0; 

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

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

     prodSubTotal += parseInt(valString); 

    }); 

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

} 

Спасибо!

Edit: В соответствии с просьбой: commaFormatted:

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; 

} 
+0

Вы можете показать нам функцию 'CommaFormatted', через которую вы ее запускаете? – crush

+0

Я отредактировал свой вопрос в CommaFormatted – Tara

+0

Рад, что вы показали нам. Это потребует изменений. – crush

ответ

0

Вы ищете toFixed(). Требуется один параметр, digits. Параметр документируется следующим образом:

Число цифр, которые должны появляться после десятичной точки; это может быть значение от 0 до 20 включительно, а реализации могут необязательно поддерживать более широкий диапазон значений. Если этот аргумент опущен, то он рассматривается как 0.

Есть также отметить, что parseInt() разбирает целые числа, усечениями любого десятичных вы могли бы иметь. parseFloat() сохранит десятичные знаки, как ожидалось.

+0

Вы считаете, что эта функция 'CommaFormatted' не винт с этим. Вероятно, это не так, так что это, вероятно, будет работать нормально. – crush

0

Использование функционировать toFixed(2)

2-это целочисленный параметр, который говорит использовать 2 десятичной точки, предполагая, что ваша запятая отформатированный код не превратить его в строку. (Если это произойдет, исправить десятичные, прежде чем вы запустите его через форматирование)

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

Не забудьте parseFloat потому что val() может быть строкой! `

1

Ну parseInt разбирает целые числа, так что вы избавляетесь от любые десятичные знаки прямо там. Используйте parseFloat.

E.g.

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 
+0

Ее функция 'CommaFormatted' также выполняет' parseInt'. Он также выглядит как десятичные знаки, которые испортят функцию 'CommaFormatted'. – crush

+0

Как я могу изменить CommaFormatted, чтобы не прерывать любые десятичные знаки? – Tara

+0

@Tara Изменение этого 'parseInt' в' CommaFormatted' поможет, но тогда ваш алгоритм добавления десятичных знаков будет сброшен. Вы должны использовать [регулярное выражение для формата запятой] (http://stackoverflow.com/questions/2254185/regular-expression-for-formatting-numbers-in-javascript). – crush

0

я решил мою проблему. Я просто изменил:

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

в

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

Как я уже говорил в комментариях, это не сценарий я написал. Это сценарий, написанный Крисом Койером, и я просто пытался его исправить. Думаю, мне не нужно было использовать CommaFormatted для моих целей?

Спасибо вам за помощь!

Смежные вопросы