cn2an 把中文数字转阿拉伯数字,基本场景几乎不会出错:一二三、一百二十三、一万两千、三点一四、负零点五,这几种都转对了。

但有一类句子会翻车。「零下五度」会被转成「0下5度」,因为它把「零」当成数字 0,「下」留了下来。这句在天气、温度、温差这类内容里很常见。

我是用 pip 装的 0.5.24 版,Windows 10 加 Python 3.13.12。下面按实际跑的结果写。

能转哪些形式

整数和小数负数都没问题。用 smart 模式跑这五个:

输入输出
一二三123
一百二十三123
一万两千12000
十10
零0

小数和负数也是对的:三点一四 → 3.14,负五 → -5,负零点五 → -0.5。

反向也测了。an2cn 把数字转回中文:123 → 一百二十三,12000 → 一万二千,10086 → 一万零八十六,3.14 → 三点一四。

装的时候有个小情况:清华镜像没有这个包,pip 直接报找不到,换官方源才装上。28 秒装完。

日期为什么转不出来

因为它有两个入口,用错入口就会报错。

带「年」「月」「日」的句子走 smart 模式,会抛异常:

当前为smart模式,输入的数据不在转化范围内:年!

要换成 transform:

cn2an.transform('二零二六年十月二十日', 'cn2an')

输出 2026年10月20日,正确。带时间的也能处理:二零二六年十月二十日下午三点 → 2026年10月20日下午3点。

所以判断规则很简单:句子里带年月日或点钟这类量词,就走 transform;纯数字串走 cn2an。

零下五度为什么会错

这条是我实测里发现的真问题。同一句「零下五度」:

  • 走 transform → 0下5度
  • 换成「负五度」→ -5度,正确

它的处理逻辑是把「零」识别成数字 0,把「下」当普通汉字保留,于是拼成了「0下5度」。语义完全变了,原来表示零下的低温,变成「0 下 5 度」这种读不通的串。

如果你的数据里有天气和温度描述,这一条必须自己兜一层。比较稳的做法是把「零下」先替换成「负」再交给它,或者干脆对温度句单独走正则。

分数能转吗

用它主推的 smart 入口,不能。三分之一和百分之五十都报同一个错:

输入的数据不在转化范围内:分!

项目说明里提到支持分数,但走 smart 拿不到结果。是不是要走别的入口才行,这次没有继续试。

整句混合文本效果怎样

拿一句日常话试:

今天气温零下五度,我买了三斤苹果,花了二十四块五。

输出是:

今天气温0下5度,我买了3斤苹果,花了24块5。

三斤变成 3斤,二十四块五变成 24块5,这两处都对。只有零下五度错了。

说明它在普通数量和货币口语上表现可以,问题集中在「零下」这类带语义的固定说法。

速度

一万次「一万两千三百四十五」的转换,用了 0.13 秒,平均每次 13 微秒。纯 Python 实现,批量处理几十万行文本也够用。

不想装 Python 的话

我把这个库包了一层菜单做成单文件 exe,8.8 MB,双击就能用,不用配环境。

输入中文数字回车,直接出结果。它会自己判断走哪个入口:带年月日的走 transform,纯数字走 cn2an。

「零下」这类写法,工具会照实给出 0下5度,但下面补一句提醒:「零下」会被转成「0下」,请先替换成「负」再转。把这个坑做进提示里了。

按 d 可以随时查看这两处已知问题。全程本地运行,不联网。

常见问题

为什么日期报错

用错入口了。cn2an 模式只处理纯数字串,带年月日的句子要用 transform。

零下五度怎么处理

先把「零下」替换成「负」,转完再把「度」拼回去,或者对温度句单独写规则。除非作者修,别指望它自己转对。

支持大写金额吗

这次没测。壹贰叁这类大写数字以及「叁仟圆整」这种财务写法都不在测试范围里。

能和分词一起用吗

没测。它是对字符串做模式和规则匹配,跟分词库如何配合这次没有验证。

适合谁

如果你要做中文文本的数字化处理,比如把文章里的数量和年月统一成阿拉伯数字,它基本场景够用,速度也快。

如果数据里温度、「零下」这类说法占比高,得自己加一层预处理,不能直接喂给它。