本ページには広告が含まれています。
ローマ数字をアラビア数字に変換します。機種依存文字(環境依存文字)ではなくアルファベットで指定してください。アラビア数字をローマ数字に変換するにはROMAN関数 (自作関数)を使用します。
- 構文
- Double = ARABIC( str )
- 引数
- str 必須
- ローマ数字を文字列で指定
- 戻り値
- 変換したアラビア数字
プログラム
//////////////////////////////////////////////////
// 【引数】
// str : ローマ数字を文字列で指定
// 【戻り値】
// 変換したアラビア数字
//////////////////////////////////////////////////
FUNCTION ARABIC(str)
HASHTBL value
value["M̿"] = 1000000000
value["D̿"] = 500000000
value["C̿"] = 100000000
value["L̿"] = 50000000
value["X̿"] = 10000000
value["V̿"] = 5000000
value["I̿"] = 1000000
// 一重上線(×1,000)
value["M̅"] = 1000000
value["D̅"] = 500000
value["C̅"] = 100000
value["L̅"] = 50000
value["X̅"] = 10000
value["V̅"] = 5000
value["I̅"] = 1000
// 標準
value["M"] = 1000
value["D"] = 500
value["C"] = 100
value["L"] = 50
value["X"] = 10
value["V"] = 5
value["I"] = 1
DIM array[-1]
DIM i = 1
WHILE i <= LENGTH(str)
IFB ASC(COPY(str, i + 1, 1)) = 773 OR ASC(COPY(str, i + 1, 1)) = 831 THEN
arrayPush(array, COPY(str, i, 2))
i = i + 2
ELSE
arrayPush(array, COPY(str, i, 1))
i = i + 1
ENDIF
WEND
RESULT = 0
i = 0
WHILE i < LENGTH(array) - 1
IFB value[array[i]] >= value[array[i + 1]] OR i = LENGTH(array) THEN
RESULT = RESULT + value[array[i]]
ELSE
RESULT = RESULT - value[array[i]]
ENDIF
i = i + 1
WEND
RESULT = RESULT + value[array[i]]
FEND
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// values : 追加する要素をvalue1から指定
// 【戻り値】
// 処理後の配列の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
DIM i = 1
WHILE EVAL("value" + i) <> EMPTY
DIM res = RESIZE(array, UBound(array) + 1)
array[res] = EVAL("value" + i)
i = i + 1
WEND
RESULT = LENGTH(array)
FEND
//////////////////////////////////////////////////
// 【引数】
// inputs : 繰り返す文字列
// multiplier : inputsを繰り返す回数
// 【戻り値】
// inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
DIM res = ""
FOR n = 1 TO multiplier
res = res + inputs
NEXT
RESULT = res
FEND
//////////////////////////////////////////////////
// 【引数】
// arrayname : 上限値を求める配列の名前
// dimension : 返す次元を示す整数
// 【戻り値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FENDアラビア数字・ローマ数字対応表
| アラビア数字 | ローマ数字 |
|---|---|
| 1 | I |
| 2 | II |
| 3 | III |
| 4 | IV |
| 5 | V |
| 6 | VI |
| 7 | VII |
| 8 | VIII |
| 9 | IX |
| 10 | X |
| 40 | XL |
| 50 | L |
| 90 | XC |
| 100 | C |
| 400 | CD |
| 500 | D |
| 900 | CM |
| 1000 | M |
使い方
ローマ数字をアラビア数字に変換します。
DIM array[] = "IX", "XXIV", "LI", "LXXXIV", "CIV", "CDXCV", "DCLVIII", "MCCL", "MMDCLXXXIV", "MMMCMXLV"
FOR item IN array
PRINT item + "," + ARABIC(item)
NEXT- 結果
IX,9 XXIV,24 LI,51 LXXXIV,84 CIV,104 CDXCV,495 DCLVIII,658 MCCL,1250 MMDCLXXXIV,2684 MMMCMXLV,3945
関連記事
- ROMAN関数 (自作関数)
- アラビア数字をローマ数字に変換します。
- radToDeg関数 (自作関数)
- 弧度法から度数法に変換します。
- degToRad関数 (自作関数)
- 度数法から弧度法に変換します。
- decToHex関数 (自作関数)
- 10進数を16進数に変換します。負数・小数の値にも対応しています。
- binToDec関数 (自作関数)
- 2進数を10進数に変換します。負数・小数の値にも対応しています。
- binToHex関数 (自作関数)
- 2進数を16進数に変換します。負数・小数の値にも対応しています。
- hexToBin関数 (自作関数)
- 16進数を2進数に変換します。負数・小数の値にも対応しています。
- decToBin関数 (自作関数)
- 10進数を2進数に変換します。負数・小数の値にも対応しています。
- hexToDec関数 (自作関数)
- 16進数を10進数に変換します。負数・小数の値にも対応しています。
- ABS関数 (スクリプト関数)
- 引数の絶対値(\(|x|\))を返します。
