var num = 1239128938213092131823;
num.toLocaleString('en-IN', { maximumSignificantDigits: 3, style: 'currency', currency: 'INR'});
on chrome:
Firefox上的:
两种浏览器的逗号模式输出都不同。 Firefox输出是我想要的,我也需要在chrome中输出相同的输出。对此有何修复?
编辑: 最近我在Chrome版本53.0.2785.116上检查了这个,现在Chrome输出与Firefox输出相同。
答案 0 :(得分:3)
更新我的回答 - 我原来声明这是一个错误是不正确的。
再次更新 - 找到Chrome显示Rs.
由于您确实传递了区域设置,因此该bug会引用其他内容。将语言环境更改为使用印度语中使用的印地语(hi-IN
),我能够获得以下代码以在两个浏览器上显示格式正确的数字:
num.toLocaleString('hi-IN', {maximumSignificantDigits: 3, style: 'currency', currency: 'INR'});
但是,您会注意到Chrome会显示Rs.
而不是卢比符号。 This is an intentional decision by Chrome:
使用“Rs。”而不是印度卢比标志(U + 20A8)的字体 并非所有平台都提供支持。
为了获得一致性,您也可以传递currencyDisplay: 'code'
,这将用“INR”替换卢比符号。这适用于Chrome和Firefox。
num.toLocaleString('hi-IN', {maximumSignificantDigits: 3, style: 'currency', currency: 'INR', currencyDisplay: 'code'});
您可能想要检查区域设置和/或Intl支持是否可用。这可以通过following code from MDN来完成(尽管如上所述,可用性并不能保证类似的实现):
function toLocaleStringSupportsLocales() {
var number = 0;
try {
number.toLocaleString('i');
} catch (e) {
return e.name === 'RangeError';
}
return false;
}
function toLocaleStringSupportsOptions() {
return !!(typeof Intl == 'object' && Intl && typeof Intl.NumberFormat == 'function');
}
if(toLocaleStringSupportsLocales()) {
if(toLocaleStringSupportsOptions()) {
console.log(num.toLocaleString('hi-IN', {maximumSignificantDigits: 3, style: 'currency', currency: 'INR', currencyDisplay: 'code'}));
} else {
// Browser supports locales but does not support Intl options
console.log(num.toLocaleString('hi-IN'));
}
} else {
// Browser does not support locales
console.error('Cannot format number - locales not supported');
}
您应该测试该功能是否能够在所有浏览器/设备上执行您想要的功能,但它应该适用于所有主要的更新浏览器。