javascript-“ toLocaleString”在不同的浏览器上提供不同的输出

var num = 1239128938213092131823;
num.toLocaleString('en-IN', { maximumSignificantDigits: 3, style: 'currency', currency: 'INR'});

在chrome上:

javascript-“ toLocaleString”在不同的浏览器上提供不同的输出

在Firefox上:

javascript-“ toLocaleString”在不同的浏览器上提供不同的输出

两种浏览器中的逗号模式输出均不同. 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');
}

您应该测试该功能是否可以在所有浏览器/设备上执行所需的功能,尽管它在所有主要的更新浏览器上都可以正常工作.

上一篇:货币作为字符串或货币作为数字?


下一篇:小象学院—案例1—汇率兑换