在JavaScript WITH DECIMAL位置使用千位分隔符对数字进行本地化格式化

时间:2016-04-08 07:35:59

标签: javascript google-chrome ecmascript-6 number-formatting ecmascript-5

在JavaScript中,我有一个任意数字作为输入。
例如:

var number = parseFloat(12345678901234.1234567);

现在我想将其显示为:

12'345'678'901'234.12

应该是

xxx'xxx'xxx.00 

如果是整数,则

xxx'xxx'xxx.y0 

如果小数点后只有一位数

我会假设这样做可以解决问题:

var number = parseFloat(12345678901234.1234567);

console.log(number.toLocaleString('de-CH', { minimumFractionDigits:2, maximumFractionDigits: 2

}));

但实际上它显示的是12'345'678'901'234.10,而不是12'345'678'901'234.12

所以我想也许我需要将minimumSignificantDigits设置为2。
但运气不好,我发现minimumSignificantDigits显然考虑了字符串中的所有数字,无论是什么愚蠢的原因,所以我需要将整数部分的位数加到2.喜欢:

var number = parseFloat(12345678901234.1234567);


console.log(number.toLocaleString('de-CH', { minimumFractionDigits:2, maximumFractionDigits: 2

,minimumSignificantDigits: parseInt(number).toString().length + 2
}));

但这仍然显示

12'345'678'901'234.10

将float转换为Number类型也没有帮助,输出仍然相同。

var number = Number(parseFloat(12345678901234.1234567));

console.log(number.toLocaleString('de-CH', { minimumFractionDigits:2, maximumFractionDigits: 2

,minimumSignificantDigits: parseInt(number).toString().length + 2
}));

我也试过这个

var number = parseFloat(12345678901234.1234567);
number.toLocaleString('de-CH', {style: 'currency', currency: 'CHF', currencyDisplay: 'code'}).replace('CHF', '')

但它似乎也没有用。
添加样式:"十进制"没有帮助,要么...... 此外,我不想知道每个区域设置的货币名称。

我做错了什么?
除了编写我自己的格式化代码之外别无其他方法(我遇到的问题是我不知道每个语言环境的千位分隔符char)吗? 或者这是一个JavaScript错误?

0 个答案:

没有答案