〜 テキスト 〜
数値を漢数字に変換

アラビア数字を領収書に書く時のような漢数字に変換するサンプルで、
漢数字は通常の漢数字・大字(旧字)の選択、桁数字の有無を指定可能です。
尚、10を「」または「」、100を「」または「」、1000を「」または「」としてますが、
「一十」または「壱拾」や「一百」または「壱佰」や「一千」または「壱仟」としたい場合、
HSP2モジュールの26行目条件を「if i \ 10 > 0」、27行目条件を「if i \ 10 < 0」に、
HSP3モジュールの19行目条件を「if i \ 10 ! 0」または「if abs(i \ 10) ! 0」としてください。
また、負数の場合の正式な表記が定められていないようなのでマイナスの場合は「負の〜」としています。
「」「マイナス」等としたい場合はHSP2は36行目、HSP3は27行目部分を変えてください。
	

numberstring 対象数値, 桁表示, 字体
対象数値漢数字に変換したい数値または数値型変数を指定する。
尚、変換結果はシステム変数refstrに代入する。
桁表示「十」「百」「千」「万」「億」または「拾」「佰」「仟」「萬」「億」を含めるか指定する。
字体通常の漢数字または旧漢数字(大字)どちらで取得するかを指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
72
#module
#deffunc numberstring int, int, int
	mref number, 0 : mref keta, 1 : mref jitai, 2
	mref rstr, 65
	sdim kansuu, 4, 10
	sdim ketakan, 4, 5
	if jitai {
		kansuu  = "零", "壱", "弐", "参", "肆", "伍", "陸", "漆", "捌", "玖"
		ketakan = "拾", "佰", "仟", "萬", "億"
	} else {
		kansuu  = "0", "一", "二", "三", "四", "五", "六", "七", "八", "九"
		ketakan = "十", "百", "千", "万", "億"
	}
	if number = 0 : rstr = kansuu : return
	rstr = "" : i = number
	repeat
		if keta ! 0 {
			if cnt \ 4 = 0 & (cnt ! 0) {
			  if i \ 10000 ! 0 : tmp = cnt / 4 + 2 : rstr = ketakan.tmp + rstr
			  if i \ 10 > 0 : tmp = i \  10 : rstr = kansuu.tmp + rstr
			  if i \ 10 < 0 : tmp = i \ -10 : rstr = kansuu.tmp + rstr
			} else {
			  if cnt \ 4 ! 0 & (i \ 10 ! 0) : tmp = (cnt - 1) \ 4 : rstr = ketakan.tmp + rstr
			  if i \ 10 >  1 : tmp = i \  10 : rstr = kansuu.tmp + rstr
			  if i \ 10 < -1 : tmp = i \ -10 : rstr = kansuu.tmp + rstr
			}
		} else {
			if i \ 10 = 0 & (i >= 10 | (i <= -10)) : rstr = kansuu + rstr
			if i \ 10 > 0 : tmp = i \  10 : rstr = kansuu.tmp + rstr
			if i \ 10 < 0 : tmp = i \ -10 : rstr = kansuu.tmp + rstr
		}
		if i < 10 & (i > -10) : break : else : i = i / 10
	loop
	if number < 0 : rstr = "負の" + rstr
	return
#global

	randomize
	repeat 3
		i = cnt
		repeat cnt + 1
			rnd tmp, 1024
			if cnt : num.i = num.i * tmp : else : num.i = tmp
		loop
	loop
	pos 0,   0 : mes "元の数字"
	repeat 3
		mes "" + cnt + ". " + num.cnt
	loop
	pos 0, 100 : mes "★数値→漢数字(桁なし)"
	repeat 3
		numberstring num.cnt
		mes "" + cnt + ". " + refstr
	loop
	pos 0, 200 : mes "★数値→漢数字(桁あり)"
	repeat 3
		numberstring num.cnt, 1
		mes "" + cnt + ". " + refstr
	loop
	pos 0, 300 : mes "★数値→旧漢数字(桁なし)"
	repeat 3
		numberstring num.cnt, , 1
		mes "" + cnt + ". " + refstr
	loop
	pos 0, 400 : mes "★数値→旧漢数字(桁あり)"
	repeat 3
		numberstring num.cnt, 1, 1
		mes "" + cnt + ". " + refstr
	loop
	stop

漢数字 = numberstring(対象数値, 桁表示, 字体)
漢数字変換した漢数字の受取先を指定する。
対象数値漢数字に変換したい数値または数値型変数を指定する。
桁表示「十」「百」「千」「万」「億」または「拾」「佰」「仟」「萬」「億」を含めるか指定する。
字体通常の漢数字または旧漢数字(大字)どちらで取得するかを指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#module
#defcfunc numberstring int number, int keta, int jitai, local i, local s
	if jitai {
		kansuu  = "零", "壱", "弐", "参", "肆", "伍", "陸", "漆", "捌", "玖"
		ketakan = "拾", "佰", "仟", "萬", "億"
	} else {
		kansuu  = "0", "一", "二", "三", "四", "五", "六", "七", "八", "九"
		ketakan = "十", "百", "千", "万", "億"
	}
	if number = 0 : return kansuu
	s = "" : i = number
	repeat
		if keta ! 0 {
			if cnt \ 4 = 0 & cnt ! 0 {
			  if i \ 10000 ! 0 : s = ketakan(cnt / 4 + 2) + s
			  if i \ 10 ! 0 : s = kansuu(abs(i \ 10)) + s
			} else {
			  if cnt \ 4 ! 0 & i \ 10 ! 0 : s = ketakan((cnt - 1) \ 4) + s
			  if abs(i \ 10) > 1 : s = kansuu(abs(i \ 10)) + s
			}
		} else {
			if i \ 10 = 0 & (i >= 10 | i <= -10) : s = kansuu(0) + s
			if i \ 10 ! 0 : s = kansuu(abs(i \ 10)) + s
		}
		if i < 10 & i > -10 : break : else : i /= 10
	loop
	if number < 0 : s = "負の" + s
	return s
#global

	randomize
	num = rnd(1024), rnd(1024) * rnd(1024), rnd(1024) * rnd(1024) * rnd(1024) * rnd(3)
	pos 0,   0 : mes "元の数字"
	foreach num
		mes "" + cnt + ". " + num.cnt
	loop
	pos 0, 100 : mes "★数値→漢数字(桁なし)"
	foreach num
		mes "" + cnt + ". " + numberstring(num.cnt)
	loop
	pos 0, 200 : mes "★数値→漢数字(桁あり)"
	foreach num
		mes "" + cnt + ". " + numberstring(num.cnt, 1)
	loop
	pos 0, 300 : mes "★数値→旧漢数字(桁なし)"
	foreach num
		mes "" + cnt + ". " + numberstring(num.cnt, , 1)
	loop
	pos 0, 400 : mes "★数値→旧漢数字(桁あり)"
	foreach num
		mes "" + cnt + ". " + numberstring(num.cnt, 1, 1)
	loop