同一个货币在不同地区的写法可能不同(如 €1.234,56 vs €1,234.56)。
输入金额,点「格式化」。
同一个金额在各主要货币下的写法,随上面的设置实时变化。
| 货币 | 代码 | 本地写法 | 默认小数位 |
|---|
⚠️ 说明:本工具只做数字格式的展示转换,不涉及任何汇率换算。
不同货币之间没有做任何金额折算,同一数字在不同货币下显示的只是「这个数字按该货币的书写习惯怎么写」。
货币符号、小数位与分组规则来自浏览器内置的 ICU 数据,不同浏览器 / 系统版本可能略有差异。
输入内容在本地处理,不上传。
做国际化产品时,金额的显示是个细节活:
· 美元写作 $1,234.56;
· 德国的欧元写作 1.234,56 €(千分位和小数点符号正好相反,货币符号还在后面);
· 日元没有小数位,写作 ¥1,235;
· 瑞士法郎写作 CHF 1’234.56(千分位是撇号)。
自己写正则去拼这些规则,很快就会漏掉某个国家,而且规则还会变。
正确做法是用 Intl.NumberFormat——浏览器内置的国际化数字格式化器,ICU 数据库里已经维护好了全世界的规则,你只需要告诉它「用哪种货币、哪个地区」。
这个工具能:
① 按任意货币 + 任意地区格式化金额;
② 切换显示方式:符号 / 代码 / 本地名称;
③ 开关千分位、切换小数位、开启紧凑记数(1.2万 / 1.2M);
④ 一键生成对应代码,直接粘到项目里用;
⑤ 下方表格列出主要货币的写法,方便横向对比。
注意:这里不做汇率换算。输入 1234,选美元显示 $1,234.00,选日元显示 ¥1,234——只是写法不同,金额数值一样。
怎么实现:
① 核心调用:new Intl.NumberFormat(locale, { style:'currency', currency, currencyDisplay, useGrouping, notation:'compact' });
② 货币列表:优先用 Intl.supportedValuesOf('currency') 取出系统支持的全部 ISO 4217 货币代码,老浏览器回退到内置的常用货币清单;
③ 默认小数位:用 formatToParts 找出 fraction 部分的长度,或直接用 resolvedOptions().maximumFractionDigits 读取;
④ 本地名称:Intl.DisplayNames([locale], { type:'currency' }),不支持时回退到代码;
⑤ 代码生成:把当前选项拼成可直接粘贴的 JS 片段,含 format() 调用。
它不做:不算汇率、不做货币转换、不校验金额合法性、不处理四舍五入策略(ICU 默认 halfExpand)。
1234567.891)。$1,234.00,选日元显示 ¥1,234——数值都是 1234,没有做任何折算。de-DE(德国):1.234,56 €——千分位是点,小数点是逗号;en-US(美国):€1,234.56——反过来;ja-JP(日本):¥1,235——日元无小数位。123万、1.2亿;1.2M、3.4K;123万。notation: 'compact'。注意它是近似显示,会按规则四舍五入,不适合用于精确金额展示(账单、合同千万别用)。US Dollar)→ 说明当前 locale 是英文,换中文地区即可;USD)→ 说明浏览器不支持 DisplayNames,工具已自动回退;审核通过后就会展示在留言板上,稍安勿躁~
还没有留言,来抢沙发吧!