ARABICアラビック関数

本ページには広告が含まれています。

ローマ数字をアラビア数字に変換します。機種依存文字(環境依存文字)ではなくアルファベットで指定してください。アラビア数字をローマ数字に変換するにはROMAN関数 (自作関数)を使用します。

構文
  1. Double = ARABIC( str )
引数
str 必須
ローマ数字を文字列で指定
戻り値
変換したアラビア数字

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   str : ローマ数字を文字列で指定 
// 【戻り値】
//   変換したアラビア数字 
//////////////////////////////////////////////////
FUNCTION ARABIC(str)
	DIM arr[][1] = "IV", "IIII", + _
					"IX", "VIIII", + _
					"XL", "XXXX", + _
					"XC", "LXXXX", + _
					"CD", "CCCC", + _
					"CM", "DCCCC"
	DIM Roman[] = "I", "V", "X", "L", "C", "D", "M"
	DIM Arbic[] = 1, 5, 10, 50, 100, 500, 1000
	
	FOR n = 0 TO UBound(arr)
		str = REPLACE(str, arr[n][0], arr[n][1])
	NEXT
	
	DIM res = 0
	
	FOR s = 1 TO LENGTH(str)
		FOR ss = UBound(Arbic) TO 0 STEP -1
			IFB COPY(str, s, 1) = Roman[ss] THEN
				res = res + Arbic[ss]
			ENDIF
		NEXT
	NEXT
	
	IF res <= 0 OR res >= 4000 THEN res = -1 
	
	RESULT = res
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

使い方

ローマ数字をアラビア数字に変換します。

UWSC
DIM array[] = "IX", "XXIV", "LI", "LXXXIV", "CIV", "CDXCV", "DCLVIII", "MCCL", "MMDCLXXXIV", "MMMCMXLV"

FOR item IN array
	PRINT item + "," + ARABIC(item)
NEXT
結果
CSV
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関数 (スクリプト関数)
引数の絶対値を求めます。