罗马数字转换

阿拉伯数字与罗马数字互转,并严格校验罗马数字的写法;不合规范时指出错在哪一条规则。

只接受 1 到 3999 的整数。再大就要靠符号上加横线表示乘 1000,不属于标准记法。

换算成功,写法符合规范

使用说明

罗马数字一共只有七个符号:I 是 1、V 是 5、X 是 10、L 是 50、C 是 100、D 是 500、M 是 1000。写出来的是字符串,读的时候从左往右,大的加、小的减,所以同一个符号在同一个数里最多只该出现三次(V、L、D 这三个 5 的倍数符号连写没有意义,一次都不许重复)。换算时不是简单地把字符对应的数值加起来,而是先按从大到小的档位去凑:能放 1000 就先放 M,再看 900、500、400,一直降到 1,这样凑出来的写法天然唯一。

减法只开放六个位置:IV 是 4、IX 是 9、XL 是 40、XC 是 90、CD 是 400、CM 是 900。规则可以概括成「左减数只能是 10 的幂,右减数只能是它紧邻的高一级」,因此 IL、IC、ID、IM 这类跨级减法和 VX、VL 这类以 5 打头的减法都不合法。想表达 49 只能用 XLIX 也就是 40 加 9,不能写 IL;想表达 99 是 XCIX,不是 IC。这正是罗马数字写法看起来繁琐的原因:它把每个十进位都各留了一个减法档位。

校验之所以做得这么细,是因为罗马数字的非法写法大多「看起来也像那么回事」。IIII 是常见的钟表写法,VIIII 是手写里常出现的省事写法,IIX 是想表达 8 却少了三级减法。如果只做字符求和,这些都会被当成合法输入接受,用户拿着错误结果去用反而更糟。所以这里先逐条查规则并指明违规点,再用「一个数只有唯一规范写法」这条性质兜底比对,两种写法都能覆盖到。

上限 3999 不是随意的取舍。标准记法里只有 M 表示 1000,允许连写三次,于是千位最高到 3000;百位以下最大是 999,写作 CMXCIX(900 加 90 加 9)。合起来 3999 写成 MMMCMXCIX,正好是这套规则能表达的最大整数,再往上就必须换记法。罗马数字也没有 0:它是加法记数法,只记录数量,不需要占位符号,所以输入 0 或负数会直接报错,而不是给出一个勉强的结果。

这个工具只做符号层面的换算与校验,不涉及任何数字含义上的吉凶或偏好。要核对章回、世次、赛事届次这类编号用这一页就够;想同时看数字的另一种读法,阿拉伯数字转中文用数字转中文,转英文单词用数字转英文,票据上的中文大写金额用人民币大写。

常见问题

为什么钟表上的 4 写成 IIII 而不是 IV?

那是制表业沿用的传统写法,因为用四个 I 可以让表盘上 1 到 8 的正、反两侧数字在视觉上对称,也避免 IV 与 VI 倒过来看混淆。这个惯例只存在于部分钟表盘面,罗马数字的规范写法仍然是 IV。本工具按规范校验,所以钟面上那种 IIII 会被判为不规范。

比 3999 更大的数怎么写?

标准记法里 M 最多连写三个,只到 3000,再往上的整数需要用符号上加一道横线表示乘 1000,横线上的 V 是 5000、X 是一万,这套记法叫上划线(vinculum)。它不是所有场合都通用,很多排版环境也打不出来,所以本工具不支持,超过 3999 会直接报错而不是给出一个不可靠的结果。

罗马数字为什么没有 0?

罗马数字是从刻痕记数演化来的加法记数法,只记录「有多少」,不需要一个占位符号来表示「这一位没有」。中世纪的拉丁文献里曾用 nulla 表示零,近代也有用字母 N 代指零的写法,但那都是后来补齐的说法,不属于罗马数字本身的符号体系。所以这里的转换从 I 也就是 1 开始,负数同样不支持。

为什么 IX 合法,IL 就不合法?

减法写法的限制是两条:左减数只能是 10 的幂,也就是 I、X、C,所以 V、L、D 不能出现在减法里;右减数在同一级或紧邻的高一级里选,于是只有 IV、IX、XL、XC、CD、CM 六种配对。IL 想表达 50 减 1,但 I 和 L 之间隔着 V 和 X,跨了两级,所以只能用 XLIX 表示 49。

为什么 4 写成 IIII、9 写成 VIIII 会被判错?

这两条都不符合规范写法。四的规范写法是 IV,九是 IX;同一符号虽然允许连写,但只在没有减法写法可用时才连写,而且 I、X、C、M 最多三次。本工具的校验除了逐条查规则,还会把输入和「这个数的唯一规范写法」比对一遍,所以这类拐弯写法会被抓住并直接告诉你应该怎么写。

小写的罗马数字能识别吗?

能。输入会先转成大写,中间的空格、逗号、点和间隔号也会一并去掉,所以像 mcm xciv 这种带分隔的写法可以直接粘进来。但字母换算本身不宽容:除了 I、V、X、L、C、D、M 七个符号以外的字母会直接指出是哪个字符不认识。

能表示小数或者分数吗?

不能。罗马数字只有整数符号,没有小数点也没有位值概念,一旦出现小数就没办法用符号表达。古罗马另有一套按十二分之一划分的分数记号,叫 uncia 体系,和整数罗马数字是两套东西,本工具只处理整数。

罗马数字一般用在什么地方?

常见于章回编号、君主与教宗的世次、赛事届次、版权年份、钟表盘面和书名卷次。这些场景有个共同点:数字都不大,也不需要参与计算,正好避开罗马数字不适合做四则运算的短板。换算之外还想看数字的英文读法,可以试数字转英文;中文读法用数字转中文。

相关:数字转英文数字转中文