我想用 JavaScript 格式化价格。我想要一个以 float
作为参数并返回格式如下的 string
的函数:
"$ 2,500.00"
我怎样才能做到这一点?
原文由 Daniel Magliola 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想用 JavaScript 格式化价格。我想要一个以 float
作为参数并返回格式如下的 string
的函数:
"$ 2,500.00"
我怎样才能做到这一点?
原文由 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'
)以使用系统区域设置(如果代码在浏览器中运行,则为用户区域设置)。 语言环境代码的进一步解释。
这 是货币代码列表。
将此与旧版本进行比较的最后说明。 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 */
en-US
。一种解决方案是安装 full-icu ,请参阅 此处 以获取更多信息原文由 aross 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
好的,根据你所说,我正在使用这个:
我愿意接受改进建议(我不想仅仅为了这样做而包含 YUI :-))
我已经知道我应该检测“。”而不是仅仅使用它作为小数分隔符……