我有一个适用于正数的javascript函数,但在输入负数时它会提醒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 :(得分:5)
/^\d+\.?\d{0,2}/
中没有允许使用前导符号,必须以数字开头。
第一步是允许这样做,例如:
/^-?\d+\.?\d{0,2}/
如果您在示例jsfiddle脚本中放置 ,则会出现一个包含-11
而不是NaN
的对话框。
答案 1 :(得分:0)
对我来说,你可以摆脱第一个正则表达式(除非你想验证输入)并使用:
function formatAsMoney(n) {
n = (Number(n).toFixed(2) + '').split('.');
return n[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + '.' + (n[1] || '00');
}
toFixed 曾经出现问题,但我不认为这是一个问题。