如何将数字格式化为货币字符串

新手上路,请多包涵

我想用 JavaScript 格式化价格。我想要一个以 float 作为参数并返回格式如下的 string 的函数:

"$ 2,500.00"

我怎样才能做到这一点?

原文由 Daniel Magliola 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 654
2 个回答

好的,根据你所说,我正在使用这个:

 var DecimalSeparator = Number("1.2").toLocaleString().substr(1,1);

 var AmountWithCommas = Amount.toLocaleString();
 var arParts = String(AmountWithCommas).split(DecimalSeparator);
 var intPart = arParts[0];
 var decPart = (arParts.length > 1 ? arParts[1] : '');
 decPart = (decPart + '00').substr(0,2);

 return '£ ' + intPart + DecimalSeparator + decPart;

我愿意接受改进建议(我不想仅仅为了这样做而包含 YUI :-))

我已经知道我应该检测“。”而不是仅仅使用它作为小数分隔符……

原文由 Daniel Magliola 发布,翻译遵循 CC BY-SA 4.0 许可协议

国际数字格式

JavaScript 有一个数字格式化程序(国际化 API 的一部分)。

 // Create our number formatter.
const formatter = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD',

  // These options are needed to round to whole numbers if that's what you want.
  //minimumFractionDigits: 0, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)
  //maximumFractionDigits: 0, // (causes 2500.99 to be printed as $2,501)
});

console.log(formatter.format(2500)); /* $2,500.00 */

使用 undefined 代替第一个参数(示例中的 'en-US' )以使用系统区域设置(如果代码在浏览器中运行,则为用户区域设置)。 语言环境代码的进一步解释

是货币代码列表

Intl.NumberFormat 与 Number.prototype.toLocaleString

将此与旧版本进行比较的最后说明。 toLocaleString 。它们都提供基本相同的功能。但是,toLocaleString 在其较早版本(pre-Intl) 中实际上并不支持语言环境:它使用系统语言环境。因此,在调试旧浏览器时,请确保您使用的是正确的版本( MDN 建议检查是否存在 Intl )。如果您不关心旧浏览器或只使用 shim ,则根本不需要担心这一点。

此外,两者的性能对于 单个 项目是相同的,但如果您有很多数字要格式化,则使用 Intl.NumberFormat 快约 70 倍。因此,通常最好使用 Intl.NumberFormat 并且每次页面加载只实例化一次。无论如何,这是 toLocaleString 的等效用法:

 console.log((2500).toLocaleString('en-US', {
  style: 'currency',
  currency: 'USD',
})); /* $2,500.00 */

关于浏览器支持和 Node.js 的一些说明

  • 如今,浏览器支持已不再是问题,全球支持率为 98%,美国为 99%,欧盟为 99+%
  • 如果您真的需要,有一个 垫片 可以在陈旧的浏览器(如 Internet Explorer 8 )上支持它
  • v13 之前的 Node.js 仅支持开箱即用的 en-US 。一种解决方案是安装 full-icu ,请参阅 此处 以获取更多信息
  • 查看 CanIUse 了解更多信息

原文由 aross 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题