Как я могу отформатировать числа в виде строки валюты в JavaScript? - PullRequest
1578 голосов
/ 29 сентября 2008

Я бы хотел отформатировать цену в JavaScript.
Я хотел бы функцию, которая принимает float в качестве аргумента и возвращает string в следующем формате:

"$ 2,500.00"

Какой лучший способ сделать это?

Ответы [ 62 ]

0 голосов
/ 19 октября 2012

Вот мой ...

function thousandCommas(num) {
  num = num.toString().split('.');
  var ints = num[0].split('').reverse();
  for (var out=[],len=ints.length,i=0; i < len; i++) {
    if (i > 0 && (i % 3) === 0) out.push(',');
    out.push(ints[i]);
  }
  out = out.reverse() && out.join('');
  if (num.length === 2) out += '.' + num[1];
  return out;
}
0 голосов
/ 06 апреля 2018

Потому что каждая проблема заслуживает решения в одну строку:

Number.prototype.formatCurrency = function() { return this.toFixed(2).toString().split(/[-.]/).reverse().reduceRight(function (t, c, i) { return (i == 2) ? '-' + t : (i == 1) ? t + c.replace(/(\d)(?=(\d{3})+$)/g, '$1,') : t + '.' + c; }, '$'); }

Это достаточно легко изменить для разных локалей, просто измените «$ 1» на «$ 1». а также '.' на ',' чтобы поменять местами, и. в цифрах, и символ валюты можно изменить, изменив символ «$» в конце.

Или, если у вас ES6, вы можете просто объявить функцию со значениями по умолчанию:

Number.prototype.formatCurrency = function(thou = ',', dec = '.', sym = '$') { return this.toFixed(2).toString().split(/[-.]/).reverse().reduceRight(function (t, c, i) { return (i == 2) ? '-' + t : (i == 1) ? t + c.replace(/(\d)(?=(\d{3})+$)/g, '$1' + thou) : t + dec + c; }, sym); }

console.log((4215.57).formatCurrency())
$4,215.57
console.log((4216635.57).formatCurrency('.', ','))
$4.216.635,57
console.log((4216635.57).formatCurrency('.', ',', "\u20AC"))
€4.216.635,57

Да, и это работает и для отрицательных чисел:

console.log((-6635.574).formatCurrency('.', ',', "\u20AC"))
-€6.635,57
console.log((-1066.507).formatCurrency())
-$1,066.51

И, конечно, вам не обязательно иметь символ валюты

console.log((1234.586).formatCurrency(',','.',''))
1,234.59
console.log((-7890123.456).formatCurrency(',','.',''))
-7,890,123.46
console.log((1237890.456).formatCurrency('.',',',''))
1.237.890,46
...