1

我有一个适用于正数的 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/中的示例

谢谢你的帮助

4

2 回答 2

5

不允许使用前导登录/^\d+\.?\d{0,2}/,它必须以数字开头。

第一步是允许这样做,例如:

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

如果你把放在你的示例 jsfiddle 脚本中,你会得到一个对话框,-11而不是NaN.

于 2013-06-19T02:21:54.863 回答
0

在我看来,您可以摆脱第一个正则表达式(除非您想验证输入)并使用:

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

toFixed曾经有过问题,但我认为这不再是问题了。

于 2013-06-19T02:47:06.217 回答