JavaScript 中数字格式化为货币的 3 种最佳方法

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

金钱喜欢有序:如何在 JavaScript 中将数字变成漂亮的标价?



想象一下:你正在编写一个在线商店。服务器返回商品价格——只是一个数字 1999.5。向用户展示“原始”数字是不礼貌的。客户希望看到 "$1,999.50",或者如果你在俄罗斯,看到 "1 999,50 ₽"。



这个问题困扰着 Stack Overflow 上的成千上万名开发者。今天,我们将一劳永逸地弄清楚如何在 JavaScript 中正确地将数字格式化为货币字符串。你将了解内置方法、它们的特性以及何时使用哪种方法最好。



为什么简单的 .toFixed(2) 是个坏主意?



许多新手会这样做:



const price = 1999.5;console.log('$' + price.toFixed(2)); // "$1999.50"


看起来好像能用。但这可是一颗定时炸弹。为什么?

  • 没有千位分隔符。 $1999.50 的可读性不如 $1,999.50。
  • 没有本地化。 在欧洲,逗号是小数点分隔符,点是千位分隔符。你的代码会出错。
  • 货币符号被硬编码。 要把 $ 换成 € 就得修改代码。


幸运的是,现代 JavaScript 为我们提供了优雅的工具。让我们来学习它们。



方法 #1:Intl.NumberFormat —— 格式化之王(推荐)



这个对象是 Internationalization API 的一部分。它专为处理区域设置、货币和数字而设计。这是最正确、最灵活的方法。



基本示例



const formatter = new Intl.NumberFormat('ru-RU', {    style: 'currency',    currency: 'RUB'});

console.log(formatter.format(1999.5)); // "1 999,50 ₽"


搞定!JavaScript 自动添加了空格、逗号和卢布符号。很神奇,对吧?



它是如何工作的?

构造函数接受两个参数:

  • locales —— 区域设置代码字符串(例如 'en-US'、'de-DE'、'ru-RU')。
  • options —— 配置对象。关键是:style: 'currency' 和 currency: 'USD'。


配置任意货币

想要美国的美元?

const usFormatter = new Intl.NumberFormat('en-US', {    style: 'currency',    currency: 'USD'});console.log(usFormatter.format(2500)); // "$2,500.00"


想要德国的欧元?

const deFormatter = new Intl.NumberFormat('de-DE', {    style: 'currency',    currency: 'EUR'});console.log(deFormatter.format(2500)); // "2.500,00 €"


请注意:在德国,点是千位分隔符,逗号是小数点。Intl 会为你处理一切。



其他选项

想要去掉小数部分(没有分币)?

const formatter = new Intl.NumberFormat('en-US', {    style: 'currency',    currency: 'USD',    minimumFractionDigits: 0,    maximumFractionDigits: 0});console.log(formatter.format(1999.5)); // "$2,000" (已四舍五入)


需要始终显示 4 位小数?没问题:

const preciseFormatter = new Intl.NumberFormat('en-US', {    style: 'currency',    currency: 'USD',    minimumFractionDigits: 4});console.log(preciseFormatter.format(1.2)); // "$1.2000"


优点: 原生、快速、支持世界上所有货币、易于更改区域设置。

缺点: 在非常旧的浏览器中无法使用(IE 10 及以下——但这已经是历史了)。



方法 #2:Number.prototype.toLocaleString() —— 快速简单



这个方法是 Intl.Num

博客

书籍推荐