以逗号分隔值格式化数字

时间:2016-08-23 09:45:32

标签: javascript

我使用javascript用逗号格式化数字,它工作得非常好。

但现在问题是如果一个值为负值,例如: -792004

它返回的输出如下: - ,792,004 ,这是逗号的开头。

如何修改此方法?

这是我的代码:

function Comma(number) {
    number = '' + number;
    if (number.length > 3) {
        var mod = number.length % 3;
        var output = (mod > 0 ? (number.substring(0, mod)) : '');
        for (i = 0; i < Math.floor(number.length / 3); i++) {
            if ((mod == 0) && (i == 0))
                output += number.substring(mod + 3 * i, mod + 3 * i + 3);
            else
                output += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
        }
        return (output);
    } else return number;
}

2 个答案:

答案 0 :(得分:3)

我知道的最简单的方法是帮助你toLocaleString()方法编号:

var x = 10033001;
var y = -10033001;

console.log(x.toLocaleString(), y.toLocaleString());

但是为了更正您的代码,您可以使用Math.abs删除号码,然后使用Math.sign添加。

var sign = Math.sign(number);
number = Math.abs(number);
// Do the conversion
return (sign < 0) ? ("-" + output) : output;

答案 1 :(得分:1)

试试这个:

const comma = function(number) {
  const prefix = number < 0 ? '-' : ''
  number = String(Math.abs(number))
  if (number.length > 3) {
    const mod = number.length % 3
    let output = (mod > 0 ? (number.substring(0,mod)) : '')
    for (let i = 0; i < Math.floor(number.length / 3); i++) {
      if (mod === 0 && i === 0)
        output += number.substring(mod+ 3 * i, mod + 3 * i + 3)
      else
        output+= ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
    }
    return prefix + output
  } else {
    return prefix + number
  }
}

如果数字为负数,则会将-分配给prefix。然后它将数字更改为其绝对值(Math.abs(number))。最后,它返回prefix的值。