In JavaScript, I have an arbitrary number as input.
For example:
var number = parseFloat(12345678901234.1234567);
Now I want to display it as:
12'345'678'901'234.12
it should be
xxx'xxx'xxx.00
if it is an integer, and
xxx'xxx'xxx.y0
if only one digit after the decimal point
I would have assumed that this would do the trick:
var number = parseFloat(12345678901234.1234567);
console.log(number.toLocaleString('de-CH', { minimumFractionDigits:2, maximumFractionDigits: 2
}));
But it actually displayed 12'345'678'901'234.10
instead of 12'345'678'901'234.12
So I thought maybe I need to set minimumSignificantDigits to 2, too.
But bad luck, I discovered minimumSignificantDigits apparently considers all the digits in the string, for whatever idiotic reason, so I need to add the number of digits of the integer part to 2. Like:
var number = parseFloat(12345678901234.1234567);
console.log(number.toLocaleString('de-CH', { minimumFractionDigits:2, maximumFractionDigits: 2
,minimumSignificantDigits: parseInt(number).toString().length + 2
}));
But this still displays
12'345'678'901'234.10
Converting the float to the Number type doesn't help either, the output is still the same.
var number = Number(parseFloat(12345678901234.1234567));
console.log(number.toLocaleString('de-CH', { minimumFractionDigits:2, maximumFractionDigits: 2
,minimumSignificantDigits: parseInt(number).toString().length + 2
}));
I also tried this
var number = parseFloat(12345678901234.1234567);
number.toLocaleString('de-CH', {style: 'currency', currency: 'CHF', currencyDisplay: 'code'}).replace('CHF', '')
but it does not seem to work either.
Adding style: "decimal" doesn't help, either...
Additionally, I don't want to have to know the currency name for each locale.
What am I doing wrong ?
Is there really no other way than writing my own formatting code (where I have the problem that I don't know the thousand separator char for each locale) ?
Or is this a JavaScript bug for certain ?