Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JS Intl.NumberFormat for currency cant have maximumFractionDigits 0

I am using the JavaScript Intl object, and I want to format a number (150 for example) to look like "£150". For Chrome untill the update to version 59 this code worked perfect:

var GBPFormatter = new Intl.NumberFormat('en-US', {
      style: 'currency',
      currency: 'GBP',
      maximumFractionDigits: 0
  });

but now it says that the "maximumFractionDigits" can not be 0, and after reading in https://developer.mozilla.org/ i found that for GBP maximumFractionDigits can not be less than 2.

All well and good, but i still need to have "£150" not "£150.00". Any ideas how i can still use the Intl object and make it look the way i need.

P.S. I know that i can make my own function that dose the same, but considering that i do not have only GBP but a bit more currencyes, I prefer to stick with a ready solution.

like image 535
Nikola.grancharov Avatar asked May 12 '17 14:05

Nikola.grancharov


People also ask

What is Intl NumberFormat?

Intl.NumberFormat.prototype.format() Getter function that formats a number according to the locale and formatting options of this Intl.NumberFormat object. Intl.NumberFormat.prototype.formatToParts() Returns an Array of objects representing the number string in parts that can be used for custom locale-aware formatting.

What is maximumFractionDigits?

maximumFractionDigits is the maximum number of fraction digits to use, with possible values ranging from 0 to 20.

What is maximumSignificantDigits?

maximumSignificantDigits. The maximum number of significant digits to use. Possible values are from 1 to 21; the default is 21.


1 Answers

You can set the maximumFractionDigits option to 0 like you want, but the value needs to be higher than minimumFractionDigits. Because the default value for minimumFractionDigits is higher than 0 for this currency, you'll need to set both of them manually to get what you want:

var GBPFormatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'GBP',
  minimumFractionDigits: 0,
  maximumFractionDigits: 0
});

console.log(GBPFormatter.format(150)); // Should output "£150"
like image 139
Kim Røen Avatar answered Oct 21 '22 20:10

Kim Røen