2013-06-19 3 views
0

У меня есть яваскрипт функция, которая хорошо работает с положительным числом, но если ввести отрицательное число его предупредит NaN:Формат денег с отрицательным числом

function formatMoney(number) { 
     number = parseFloat(number.toString().match(/^\d+\.?\d{0,2}/)); 
     //Seperates the components of the number 
     var components = (Math.floor(number * 100)/100).toString().split("."); 
     //Comma-fies the first part 
     components [0] = components [0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
     //Combines the two sections 
     return components.join("."); 
    } 
alert(formatMoney(-11)); 

Вот пример в jsFiddle http://jsfiddle.net/longvu/wRYsU/

спасибо любая помощь

+0

Что вы думаете '.match (/^\ d + \.? \ D {0,2} /))' делает? – zerkms

+0

Если * match * не находит совпадение, он возвращает 'null', а' parseFloat (null) 'возвращает' NaN'. – RobG

ответ

4

Для справок: /^\d+\.?\d{0,2}/, его необходимо стартовая цифра.

Первый шаг, чтобы позволить, что-то вроде:

/^-?\d+\.?\d{0,2}/ 

Если вы поместите что в вашем примере jsfiddle сценарий, вы получите диалоговое окно с -11, а не NaN.

+0

Он отлично работает. спасибо –

0

Кажется мне, вы можете избавиться от первого регулярного выражения (если вы не хотите, чтобы подтвердить ввод данных) и использования:

function formatAsMoney(n) { 
    n = (Number(n).toFixed(2) + '').split('.'); 
    return n[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '.' + (n[1] || '00'); 
} 

Там когда-то были проблемы с toFixed, но я не думаю, что это проблема.

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