罗马数字
1–3999 双向转换,非法写法会指出是哪一位。
罗马数字用七个字母计值:I 1、V 5、X 10、L 50、C 100、D 500、M 1000。规则是「大在左就加、小在左就减」,但减法是受限的:只有 I、X、C 可以做减数,而且只能减比自己大的那一档里的 5 或 10 的倍数,合起来只有 IV(4)、IX(9)、XL(40)、XC(90)、CD(400)、CM(900) 六种合法组合,IC、IM、XD、VL、LC 都不成立。连写方面 I、X、C 最多三次,V、L、D 本身已经是 5 的倍数、从不重复。按这套规则,可表示范围是 1 到 3999——经典记法没有 0(中世纪抄写员用 nulla 表示),也没有 4000 以上的专用字母,历史上靠字母上方加横线(vinculum)表示乘 1000,本工具不实现那套扩展。
数字转罗马用标准的十三档贪心表(1000、900、500、400、100、90、50、40、10、9、5、4、1),结果一定是规范写法。罗马转数字则做严格校验,而不是简单地「左小右大就减」:逐条检查非法字符及其位置、重复连写、减法组合是否合法、减数是否紧跟在不小于它的字母之后,最后再与贪心表生成的规范写法回环比对,因此 XIX 通过而 IXX、VIVI、MCMC 会被拒绝,并告诉你「N 的标准写法是 XXX,从第几个字符起不一致」。大小写与空格不敏感,xiv 与 XIV 等价。输入框每行一个值,可以整批处理,失败行标红并在上方汇总「N 行成功,M 行失败」;全部计算在浏览器本地完成。
罗马数字怎么用
- 年份、世纪、章节号:默认「数字 → 罗马」,每行写一个阿拉伯数字,2026 输出 MMXXVI;把多行一起贴进去可以一次转换一列序号。
- 校验手写的罗马数字:切到「罗马 → 数字」再输入,非法写法不会给你一个凑出来的数,而是指出第几个字符、违反了哪条规则,以及规范写法应该是什么。
- 批量清洗数据:把整列值逐行粘贴,成功的行按「输入 → 结果」列出,失败行列在提示区(最多举前三行),meta 给出成功与失败的行数,方便回源头核对。
常见问题
为什么 IIII 被判非法?钟表上明明写的是 IIII。
规范的算术写法里 4 必须是 IV,而 IIII 是四个 I 连写,超过「同一个字母最多连写三次」的上限,所以工具在检查重复连写这一步就拒绝它,报错会写「第 4 个字符 I 前面已经有 3 个同样的字母,连写最多 3 次」。钟面上的 IIII 是历史习俗(英文俗称 watchmaker’s four):一说是为了避免 IV 与造物主之名 Jupiter 的缩写撞车,一说是为了让盘面左右字形对称、VIII 与 IIII 视觉等宽。它属于装饰性写法而不是算术写法,因此本工具不会把 IIII 当作 4 输出,遇到表盘时按习俗自己理解即可。
99 为什么必须写 XCIX,不能写 IC?
因为减数只能减「相邻档位」的 5 或 10 倍:I 只能减 V 和 X,X 只能减 L 和 C,C 只能减 D 和 M。IC 想表达 100 − 1,跨了两档以上,不在合法集合里;同理 IM、XD、VL、LC 都非法。99 的正确拆法是先写 90(XC)再写 9(IX),拼成 XCIX。这套约束也正是罗马数字只能覆盖 1–3999 的原因:千位以上没有对应的减式可写。
要表示 4000 或者更大的数怎么办?0 又怎么表示?
经典记法做不到。中世纪与近代的扩展写法是在字母上方加一条横线(或两侧加竖线)表示该数乘 1000,于是 IV 加上横线就是 4000,再加一层就是百万级;这套记法排版复杂、规则不统一,本工具不生成也不解析,超出 1–3999 的行会明确报「超出可表示范围」。0 在罗马数字体系里本来就没有位置——它是位值记法的产物,古罗马人用空位或 nulla 表达「没有」,所以输入 0 也会被拒绝,请改用阿拉伯数字。