数字格式化
转换使用 Intl.NumberFormat 格式化数字——千分位、科学计数法、精度与货币,支持任意语言区域。
本页内容
什么是数字格式化?#
同一个数,在不同地方写法不同。1234567.89 在美式英语里是 1,234,567.89;在德语里是 1.234.567,89(句点和逗号互换角色);在印地语里是 12,34,567.89(按”拉克”两位一组分组,而不是三位一组);在紧凑英文里缩成 1.23M。这些写法没有哪个是”错的”——每一种都是当地正确的约定,而把它写对,对收据、仪表盘以及任何要给人读的数字都很重要。
本页是浏览器原生 Intl.NumberFormat 的实时前端,和正式应用用的是同一个引擎。你给它一个原始数字,再选择样式(纯小数、货币或百分比)、记法(标准、科学、工程或紧凑)、语区、小数位上下限以及分组开关,它就即时渲染出正确的本地化字符串,省去手写分隔符表且不会过时。
怎么用#
- 输入 Value(默认
1234567.89)。普通小数和科学计数法(如1.23e5)都行;带分组的输入(如1,000)会被有意拒绝,避免对歧义文本悄悄重新格式化。 - 选择 Style:decimal(纯数字)、currency(货币,会显示货币选择器——USD、EUR、GBP、JPY、CNY、INR 等,均为 ISO 4217 代码)、percent(百分比,乘以 100 并加上该语区的百分号)。
- 选择 Notation:standard(标准)、scientific(科学,
1.23E6)、engineering(工程,指数恒为 3 的倍数)、compact(紧凑,1.23M、1.23亿)。 - 从代表性列表里选择 Locale(en-US、zh-CN、de-DE、hi-IN、ja-JP……)。一改动,输出立刻重渲染。
- 微调 Min digits / Max digits(0–20)和 Grouping(千分位开关)。Output 框实时更新,Copy 一键复制。
核心特性#
- 浏览器原生
Intl。 用的是你运行时自带的Intl.NumberFormat,输出和真正的本地化应用一致——不依赖第三方格式化库,也没有会过时的查找表。 - 按语区分组正确。 自动处理西方千分位(
1,234,567)、印度拉克分组(12,34,567)、中文四位分组(123,4567式),以及德语里句点与逗号的对调——只要选对语区即可。 - 紧凑与工程记法。 紧凑把大数压成
1.23M/1.23B(或 CJK 语区的123万/12亿);工程记法让指数恒为 3 的倍数,与 SI 词头(kilo、mega、giga)整齐对应。 - 内置货币与百分比。 货币接受任意 ISO 4217 代码,并把符号/标签放在该语区期望的位置(数字前或后);百分比则套用该语区自己的百分号和间距。
- 可控的小数位。 用最小/最大小数位(0–20)强制补零或截掉噪声小数——和
Intl.NumberFormat暴露的旋钮一致。
实例演示#
用默认的 1234567.89,样式 decimal、记法 standard、分组开启,只切换 Locale,观察分隔符的变化:
en-US: 1,234,567.89
de-DE: 1.234.567,89
hi-IN: 12,34,567.89
德语行相比英语行把 . 和 , 互换了。印地语行则把最后六位写成 12,34,567——一个”拉克”是十万,所以印度习惯从右起按 2-2-3 分组,而不是 3-3-3。两种写法对各自的语区都正确,而手写格式化器通常会错其中一个。
再把记法切到 compact,同一个值就缩成:
en-US: 1.23M
zh-CN: 123.46万
ja-JP: 123万
英文用 SI 风格的 M(百万);中文和日文用本土的”万”为单位,于是 1,234,567 落在”123.46 个万”,而不是”1.23 个百万”——同一个量,四种各自符合文化习惯的写法。
常见问题#
为什么 1,000 这种带分组的输入会被拒?#
因为逗号是有歧义的:在 en-US 里它是千分位,但在 de-DE 里它是小数点。一旦接受,就意味着要悄悄猜输入本身用的语区。工具改为接收原始数字、在输出时套用你选定语区的分组——两个方向都不含糊。
为什么紧凑模式下英文是 1.23M,中文却是 123.46万?#
因为紧凑记法用的是各语区自己的量级词。英文按千、百万、十亿(1000 的幂)计数;中文和日文按”万""亿”(10000 的幂)计数。底层那个数完全相同,只是约定的分组单位不同。
工程记法相对科学记法什么时候更有用?#
两者都把数写成”尾数乘以 10 的幂”,但工程记法强制指数为 3 的倍数(1.234567 × 10⁶,而不是 10 的非整数幂),这正好对应 SI 词头(kilo、mega、giga……)。当输出要挨着物理单位时用工程记法;只想要紧凑的归一化形式时用科学记法。
货币选项会按汇率换算吗?#
不会。货币模式只做格式化——把 1234.56 按 en-US 写成 $1,234.56、按 de-DE 写成 1.234,56 €,用的是该语区的符号位置。它不把美元换算成欧元。汇率每分钟都在变,需要一个本页刻意没有的实时数据源。