var num = 1239128938213092131823;
num.toLocaleString('en-IN', { maximumSignificantDigits: 3, style: 'currency', currency: 'INR'});
在chrome上:
在Firefox上:
两种浏览器中的逗号模式输出均不同. Firefox输出是我想要的,我也需要chrome中的相同输出.有什么解决办法吗?
EDIT:
Recently i checked this on Chrome Version 53.0.2785.116, now the chrome output is same as Firefox output.
解决方法:
更新我的答案-我最初的说法是错误,这是不正确的.
再次更新-找到了Chrome显示Rs的原因.
该错误涉及其他内容,因为您确实在传递语言环境.更改语言环境以使用印度语(hi-IN)中的北印度语,我能够获得以下代码以在两种浏览器上显示正确格式的数字:
num.toLocaleString('hi-IN', {maximumSignificantDigits: 3, style: 'currency', currency: 'INR'});
但是,您会注意到Chrome将显示Rs.而不是卢比符号. This is an intentional decision by Chrome:
Use “Rs.” instead of the Indian Rupee sign (U+20A8) for which the font
support is not available on all platforms.
为了保持一致性,您还可以传递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');
}
您应该测试该功能是否可以在所有浏览器/设备上执行所需的功能,尽管它在所有主要的更新浏览器上都可以正常工作.