罗马数字转换器只有一个输入框, 却同时双向工作. 输入 1994, 它回答 MCMXCIV; 输入 MCMXCIV, 小写或字母间带空格都可以, 它回答 1994. 结果卡并排显示阿拉伯数字和罗马数字, 各带一个复制按钮; 下方参考表列出七个基本符号: I 是 1, V 是 5, X 是 10, L 是 50, C 是 100, D 是 500, M 是 1,000.
数字如何被拆开
转换器按从大到小的 13 步表工作: M (1,000), CM (900), D (500), CD (400), C (100), XC (90), L (50), XL (40), X (10), IX (9), V (5), IV (4), I (1), 每步把能放下的符号追加进结果. 1,994 就是 M 取 1,000, CM 取 900, XC 取 90, IV 取 4: MCMXCIV. 年份 2,026 依次是 MM, XX, VI: MMXXVI. 占位符里的例子 42 落在 XL 再 II: XLII.
六个减法规则
合法的减法只有六种: IV (4), IX (9), XL (40), XC (90), CD (400), CM (900). 校验器是一条严格的规范顺序模式, 所以 49 写作 XLIX 而不是 IL; 99 写作 XCIX 而不是 IC; 44 写作 XLIV, 因为像 XXXXII 那样连排四个 X 违反同一符号最多重复三次的规则. VV, IIII, XM 会被同样拒绝: 模式检查 M 段, C 或 D 段, X 或 L 段, I 或 V 段必须依次降序出现, 且不允许其他组合.
取值范围和一个漏洞
阿拉伯数字必须是 1 到 3,999 之间的整数; 0 和 4,000 都会得到范围错误. 3,999 是规范写法里最大的罗马数字, 写作 MMMCMXCIX: 三个 M, 再 CM, 再 XC, 再 IX. 漏洞在于: 罗马数字输入完全没有上限. 模式允许任意长的 M 连排, 所以 MMMM 被解析成 4,000, MMMMM 解析成 5,000, 尽管任何阿拉伯数字输入都不可能产出这两个字符串.
输入框实际接受什么
输入框先尝试把文本读成整数, 只有当文本与这个整数完全一致时才转换. 两侧带多余空格的 42 可以工作, 因为文本先被修剪; 但 42.0 不行: 它解析成 42, 两个字符串不一致, 于是文本改按罗马数字处理并被拒绝. 带逗号的 1,994 行为相同. 罗马这一侧, 字母大小写和内部空格都无所谓: mcmxciv 和 m c m x c i v 都返回 1994.
这个数字用在哪
罗马数字活在年份牌, 章节标记和钟表盘上, 所以 2,026 在文凭或片头卡上写作 MMXXVI. MCMXCIV 是 7 个字符, 而 1994 只有 4 个; 字符计数器把这种长度差变得具体. 用文本反转器把字母倒过来得到 VICXMCM, 转换器拒绝它, 这是顺序规则有多严的一次快速演示. 进制转换器覆盖数字系统的另一面: 1994 在二进制是 11111001010, 在十六进制是 7CA; 摩斯电码工具则是最近的亲戚: 另一种用小而固定的字母表拼出数值的方案.
相关阅读
凯撒 rot13工具是罗马时代留下的另一个经典: 它把每个字母平移固定位数, 而不是用符号组合出数字. 另一篇比例主题的教程看宽高比怎么算, 文本侧的清洗步骤看转义工具怎么用.