Alina Anjum
Alina Anjum

Reputation: 1230

Format numbers in comma separated value

I am using javascript to format the number with commas , it was working very fine.

But now the problem is if a value is comming in negative for example : -792004

It is returning the output like : -,792,004 that is comma is in the start.

How can I modify this method ?

Here is my code :

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;
}

Upvotes: 0

Views: 460

Answers (2)

Morteza Tourani
Morteza Tourani

Reputation: 3536

The simplest way I know which will helps you is toLocaleString() method on number:

var x = 10033001;
var y = -10033001;

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

But for correction of your code, you can remove number sign with Math.abs and add it after with Math.sign.

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

Upvotes: 2

Michał Perłakowski
Michał Perłakowski

Reputation: 92471

Try this:

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
  }
}

If the number is negative, it assigns - to prefix. Then it changes number to its absolute value (Math.abs(number)). In the end it returns value with prefix.

Upvotes: 1

Related Questions