🔢
免费数字转文字工具
将任意数字转换为英语、越南语、波兰语、土耳其语、西班牙语、葡萄牙语、法语、德语、俄语等另外 7 种语言的文字:基数、货币金额和支票大写写法。
加载后可离线使用
常见用途
- 在支票和法律文件上写数字将金额转换为书面单词,用于支票、汇票和需要书面金额的法律合同。
- 为教育材料用单词写数字将数字转换为书面英文,用于工作表、教育内容和语言学习材料。
- 用单词写发票金额将发票总额转换为书面单词,用于国际发票、采购订单和付款请求。
- 拼写写作和发布的数字通过将数字转换为单词来遵循样式指南规则,用于论文、文章、书籍和专业写作。
- 无障碍和屏幕阅读器的单词数字为可访问内容、ARIA标签和屏幕阅读器兼容性生成写出的数字字符串。
工作原理
此转换器使用手写算法——没有库、没有 API 调用。整个转换在你的浏览器中运行,使用三个静态查找表(个位、十位以及 "thousand"、"million" 等量级词)和一个分块循环,将任意整数拆分为三位一组,并在本地组装成英文短语。
- 1输入解析与符号检测工具去除逗号,检查开头的负号,并用简单的数字正则验证输入。它还使用 BigInt 捕捉大于 Number.MAX_SAFE_INTEGER(9,007,199,254,740,991)的数字,以免 JavaScript 浮点精度悄悄破坏结果。
- 2三位分块与量级词整数部分被反复除以 1,000,每个余数(0–999)通过百位-十位-个位查找转换。然后每个分块加上 SCALES 数组中的量级词('thousand'、'million'、'billion'、'trillion'、'quadrillion'),各分块用逗号连接。
- 3按模式后处理根据所选模式对单词字符串进行转换:序数模式对最后一个单词应用硬编码的后缀映射(例如 'twenty-one' 变为 'twenty-first');货币模式查找所选货币(USD、GBP、EUR、INR、JPY、CAD、AUD)的主单位和辅单位名称,并将小数部分四舍五入到分;支票/法律模式将输出格式化为 'One thousand two hundred thirty-four and 56/100 dollars'。
- 4在浏览器中显示并复制结果转换后的字符串在每次按键时通过 React 的 useMemo 重新计算——没有网络请求。点击“复制”会使用浏览器的 navigator.clipboard API 将结果写入剪贴板。
指南
操作示例
输入框一开始是 1234,结果显示“One thousand, two hundred thirty-four”。在选中 USD 的情况下点按“货币”,然后输入 1234.56:结果是“One thousand, two hundred thirty-four dollars and fifty-six cents”,下方的说明以“使用的金额:$1,234.56”开头。点按“支票书写”,同样的金额显示为“One thousand two hundred thirty-four and 56/100 dollars”,去掉了逗号,这是支票上的写法。勾选“结尾加 “only””,结果末尾会加上“only”。点按“序数”并输入 21,得到“Twenty-first”。“批量(每行一个)”则对粘贴的列表做同样的转换。
使用哪些设置,以及限制
- 选择与任务相符的模式。 “基数”按数字本身读出,小数部分逐位读出,所以 12.05 变成“Twelve point zero five”。“序数”把 21 读作“Twenty-first”,把 1000000 读作“One millionth”,并且只在语言为英语时提供。“货币”会写出货币名称,并舍入到最近的辅币单位,所以 1.995 美元是“Two dollars”。“支票书写”把分写成分数(“and 56/100”),并去掉各组之间的逗号。像 JPY 这样没有辅币单位的货币,会舍入为整数。
- 匹配您文档的英语风格。 复选框“英式 “and”(one hundred and twenty-one)”会把 121 变成“One hundred and twenty-one”,把 1001 变成“One thousand and one”。“各组之间加逗号”和“加连字符(twenty-one)”默认开启;关闭连字符后,21 读作“Twenty one”。“使用 lakh / crore 说法”会把 12345678 变成“One crore, twenty-three lakh, forty-five thousand, six hundred seventy-eight”,并且在“货币”和“支票书写”中选择 INR 时会自动开启,直到您自己勾选或取消勾选。“字母大小写”提供“句首大写”“每词首字母大写”“全部大写”和“全部小写”。
- 选择货币,或自定义名称。 “货币”菜单出现在“货币”和“支票书写”模式中。对于英语,它列出 19 个代码,从 USD、GBP 和 EUR 到 INR、JPY、CHF 和 ZAR。“自定义…”会打开“货币名称(例如 bitcoin)”和“辅币单位(可选,例如 satoshi)”,两者各限 40 个字符。填入 bitcoin 和 satoshi 后,1234.56 读作“One thousand, two hundred thirty-four bitcoin and fifty-six satoshi”。自定义名称从不变复数,名称为空时会变成“units”,没有辅币单位时金额会舍入为整数。
- 按您手头的写法直接输入数字。 “1,234.56”和“1.234,56”都表示 1234.56:当两种符号都出现时,最后一个是小数点。单独一个逗号,如果后面恰好有三位数字、前面有一到三位,就是千位分隔符(“1,234”);否则是小数点(“1,5”)。在英语中,单独一个点始终是小数点,但在德语或其他写作 1.234,5 的语言中,它是千位分隔符,所以 10.000 是一万。空格、撇号和下划线会被忽略,开头的 + 或 - 可以接受,阿拉伯-印度数字、波斯数字和全角数字会被转换。英语在小数点前最多接受 36 位数字。
- 在批量模式下转换一个列表。 点按“批量(每行一个)”,在“数字,每行一个”下粘贴数字,每行一个。每一行都使用与单个输入框相同的模式、语言、货币和样式设置,页面会报告数量,例如“已转换 4 行”,如果有某一行失败,后面会接上“ · 有 1 行无法转换”。无法识别的行会以红色显示“不是有效数字”。“全部复制”会把文字逐行复制,“下载 CSV”会保存 number-to-words.csv,列为“数字”和“英文单词”。只读取前 5,000 个非空行。
- 更改文字所用的语言。 “语言”菜单列出英语和另外 19 个选项,其中有 Deutsch、Español、三种地区变体的 Français、两种的 Português、两种的 Tiếng Việt、日本語、한국어 和 فارسی。以其中某种语言显示的页面,会从该语言开始。“序数”仅限英语,所以在其他语言中该按钮会消失。每种语言都有各自的货币列表和位数上限,例如德语为 21 位,越南语为 27 位。“分享结果”会复制一个链接,其中包含数字,以及您更改过的模式、货币和语言。
常见问题及解决方法
- 它显示“请输入有效的数字(数字可带小数点或逗号,例如 1,234.56 或 1.234,56)”
- 文本不是普通的数字。字母以及 $ 或 € 之类的符号会被拒绝。1e3 这样的科学计数法、1.2.3 这样的第二个小数点,以及任何不是三位一组的分组方式,同样会被拒绝。最后一条规则会拦下 12,34,567 这样的印度式逗号:请改为输入 1234567 或 1,234,567,并勾选“使用 lakh / crore 说法”,这样文字中就会出现 lakh 和 crore。在“批量(每行一个)”中,这些行会显示“不是有效数字”。
- 它显示“数字太大(最多 36 位,最大到 decillion)”
- 英语在小数点前最多 36 位。在其他语言中,提示会变成“数字过大(该语言最多 21 位)”,并带有该语言自己的位数上限。在“货币”和“支票书写”中,位数是在舍入之后计算的,所以接近上限的数字可能会越过上限。请去掉几位数字,或把数字拆开,分别转换各部分。
- 它显示“序数只能用整数。请去掉小数部分,或切换为基数。”
- “序数”没办法读出“second point five”。只要小数部分不全是零就会触发这条提示,所以 2.5 会失败,而 2.0 得到“Second”。请删除小数,或点按“基数”来读出带小数的整个数字。“货币”和“支票书写”接受小数,因为它们把小数当作分。
- 我输入了 1.500,结果显示“One point five zero zero”,而不是 fifteen hundred。
- 在英语页面上,单独一个点是小数点,而单独一个逗号只有在后面恰好有三位数字时才是千位分隔符。要得到 fifteen hundred,请输入 1,500;或者把“语言”切换为用点写 1.500 的语言,例如 Deutsch,其中它会被读作 1500。前导零也会改变规则:0,500 被读作小数,绝不会读成五百。
- 我输入了一个金额,文字却显示“Zero dollars”,说明里写着“使用的金额:$0.00”。
- “货币”和“支票书写”会先舍入到最近的辅币单位,所以 0.004 变成 0.00,1.995 变成 2.00。至少输入 0.005,才会出现一分。结果下方的“使用的金额”一行始终显示实际拼写出来的舍入后的数字,所以在把文字复制到发票上之前,请先核对它。如果舍入后的金额为零,负号会被去掉。
对比分析
此工具只负责把数字转换成文字。它不了解您银行的内部格式、您所在国家的支票规则,也不知道文件上的金额是否正确,所以请对照您必须遵守的规范检查结果。几个整数金额用手写没问题,但长数字、分以及 lakh 或 crore 的分组方式是最容易出错的地方。英语最多支持 36 位数字和 19 种货币,另外还可以自定义。此工具不能读取 1/2 这样的分数,也不能读取罗马数字。