/** * @fileoverview ローマ数字とアラビア数字を変換する * @author 面独斎 (Mendoxi), Kenshi Muto <kmuto@debian.org> */ /* Copyright 2008 Kenshi Muto Copyright 2004-2006 面独斎 (Mendoxi) mendoxi@cam.hi-ho.ne.jp http://www.cam.hi-ho.ne.jp/mendoxi/misc/roman-arabic.html */ /** * アラビア数字からローマ数字に変換する * @param {Long} s アラビア数字数値 * @type String * @return ローマ数字文字列 */ function arabic2roman(s) { var n = Number(s); var v = ""; var i = ["", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix"]; var x = ["", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc"]; var c = ["", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm"]; var m = ["", "m", "mm", "mmm", "mmmm"]; if (n >= 1 && n <= 4999) { v += m[Math.floor(n / 1000)]; n %= 1000; v += c[Math.floor(n / 100)]; n %= 100; v += x[Math.floor(n / 10)]; n %= 10; v+= i[n]; } return v; } /** * ローマ数字からアラビア数字に変換する * @param {String} s ローマ数字文字列 * @type Long * @return アラビア数字数値 */ function roman2arabic(s) { var i = 0; var v = 0; var n, c; s = s.toLowerCase(); if (s.charAt(i) == "m") { for (n = 0; s.charAt(i) == "m"; n++) i++; if (n > 4) return 0; v += n * 1000; } if (s.charAt(i) == "d" || s.charAt(i) == "c") { if ((c = s.charAt(i)) == "d") { i++; v += 500; } if (c == "c" && s.charAt(i + 1) == "m") { i += 2; v += 900; } else if (c == "c" && s.charAt(i + 1) == "d") { i += 2; v += 400; } else { for (n = 0; s.charAt(i) == "c"; n++) i++; if (n > 4) return 0; v += n * 100; } } if (s.charAt(i) == "l" || s.charAt(i) == "x") { if ((c = s.charAt(i)) == "l") { i++; v += 50; } if (c == "x" && s.charAt(i + 1) == "c") { i += 2; v += 90; } else if (c == "x" && s.charAt(i + 1) == "l") { i += 2; v += 40; } else { for (n = 0; s.charAt(i) == "x"; n++) i++; if (n > 4) return 0; v += n * 10; } } if (s.charAt(i) == "v" || s.charAt(i) == "i") { if ((c = s.charAt(i)) == "v") { i++; v += 5; } if (c == "i" && s.charAt(i + 1) == "x") { i += 2; v += 9; } else if (c == "i" && s.charAt(i + 1) == "v") { i += 2; v += 4; } else { for (n = 0; s.charAt(i) == "i"; n++) i++; if (n > 4) return 0; v += n; } } return (s.charAt(i) == "" && v >= 1 && v <= 4999) ? v : 0; }