VALバリュー関数

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

文字列を数値に変換します。戻り値の型はDouble(倍精度浮動小数点値)。Doubleの範囲外の数値だとINFもしくは-INFが返ります。INFとはINFinity(無限大、∞)のことです。

構文
  1. Double = VAL( 文字列, エラー値 )
引数
文字列 (String)必須
数値に変える文字列
エラー値 (Integer = ERR_VALUE)省略可
数値に変換できない場合に返す値
戻り値
数値

数値変換できない場合はエラー値を、デフォルトではERR_VALUE-999999)を返す

使い方

文字列形式の123を数値に変換します。

UWSC
PRINT VAL("123")
結果
プレーンテキスト
123

数値を指定した場合、そのままの値を返します。

UWSC
PRINT VAL(123)
結果
プレーンテキスト
123

カンマ区切りの値はカンマが外されます。桁区切りの位置が正しくなくてもエラーは発生しません。

UWSC
PRINT VAL("12,345")
PRINT VAL("123,45")
結果
プレーンテキスト
12345
12345

全角の値は半角の数値に変換されます。

UWSC
PRINT VAL("1234")
PRINT VAL("123,4")
結果
プレーンテキスト
1234
1234

先頭や小数点以下末尾のゼロ埋めは外されます。

UWSC
PRINT VAL("00123")
PRINT VAL("123.45000")
結果
プレーンテキスト
123
123.45

漢数字はエラーを返します。

UWSC
PRINT VAL("百二十三")
PRINT VAL("壱百萬円")
結果
プレーンテキスト
-999999
-999999

1,000,000,000,000,0001E15)以上の値、または0.00011E-4)未満の値であれば指数表記、そうでなければ数値で返します。指数表記の場合、仮数部は「\(1<=仮数部<10\)」の範囲になります。

UWSC
PRINT VAL("1E5")
PRINT VAL("1.8E20")
PRINT VAL("123E25")
PRINT VAL("5.2E-4")
PRINT VAL("3.4E-10")
結果
プレーンテキスト
100000
1.8E20
1.23E27
0.00052
3.4E-10

VAL関数では分数の計算はされません。分数を計算するにはEVAL関数を使います。

UWSC
PRINT VAL("12/25")
PRINT EVAL("12/25")
結果
プレーンテキスト
-999999
0.48

数値でない場合はERR_VALUEを返すので、数値に変換できるか否かで条件分岐することができます。

UWSC
IFB VAL("abcde") <> ERR_VALUE THEN
	PRINT "数値に変換しました"
ELSE
	PRINT "数値に変換できませんでした"
ENDIF
結果
プレーンテキスト
数値に変換できませんでした

文字列か数値か判定

文字列か数値を判定するには+(演算子)もしくはVARTYPE関数を使います。

+は、演算子の両側が数値の場合は算術演算子、そうでない場合は連結演算子として機能します。つまり加算されるか結合されるかで数値かどうかを判断することができます。

aは文字列なので結合されて1234が返り、bは数値なので加算されて127が返ります。

UWSC
DIM a = "123"
PRINT a + 4

DIM b = 123
PRINT b + 4
結果
プレーンテキスト
1234
127

VARTYPE関数は引数の値が文字列であれば258、数値ならば5を返します。

UWSC
DIM a = "123"
PRINT VARTYPE(a)

DIM b = 123
PRINT VARTYPE(b)
結果
プレーンテキスト
258
5

VAL関数を使うと文字列・数値に関係なく、計算に使える数値として扱えるようになります。外部ファイルから読み込んだ文字列を計算に使う場合などに役立ちます。

UWSC
PRINT VAL("123") + 4
PRINT VAL(123) + 4
結果
プレーンテキスト
127
127

数値から文字列に変換

VAL関数とは反対に数値から文字列に変換する場合は、VARTYPE関数で文字列型に変換するか空文字と結合させることで型変換を行います。

UWSC
DIM n = 12
n = VARTYPE(n, VAR_USTR)

PRINT n
UWSC
DIM n = 12
n = "" + n

PRINT n

指数表記

UWSCでは非常に大きい値や小さい値を指数表記(Exponentialエクスポネンシャル Notationノーテーション)で表すことができます。

1,000,000,000,000,0001E15)以上の値、または0.00011E-4)未満の値は指数表記で表されます。

\[(仮数部)E(指数部)\] \[(仮数部)E(指数部) = (仮数部) \times 10 ^{(指数部)}\]

\[1.0E+n = 1.0 \times 10^{n}\] \[1.0E-n = 1.0 \times 10^{-n} = 1.0 \times \frac{1}{10^{n}}\]

例えばアボガドロ定数はEを使った指数表記では以下のようになります。

\[6.02214076 \times 10^{23} = 6.02214076E+23\]

指数がプラスの場合E++は省略可能です。

\[6.02214076E+23 = 6.02214076E23\]

電子量は以下のようになります。

\[1.602176634 \times 10^{-19} = 1.602176634E-19\]

UWSCではこのように指数表記で表された値もVAL関数の引数に文字列型で指定することで、計算に使える数値にすることができます。

UWSC
PRINT VAL("6.02214076E+23")   // アボガドロ定数
PRINT VAL("6.02214076E23")    // アボガドロ定数
PRINT VAL("1.602176634E-19")  // 電子量

例えば、光が5秒間に進む距離の計算は以下のようになります。

UWSC
PRINT VAL("2.99792458E8") * 5 + " m"
結果
プレーンテキスト
1498962290 m

プログラム実行例

指数表記の値を数値表記にする

指数表記で書かれた値を数値に直します。

\[1.25\rm{E}+6=1.25 \times 10^{6}\]
UWSC
PRINT VAL("1.25E+6")
結果
プレーンテキスト
1250000
使用関数

指数表記の値の計算

\(1^{15}\)以上の値は指数表記になります。

UWSC
PRINT VAL("1E15") - 1
PRINT VAL("1E15") + VAL("1.5E16")
結果
プレーンテキスト
999999999999999
1.6E16
使用関数

オフライン作業取得

UWSC
DIM WshShell = CREATEOLEOBJ("WScript.Shell")

TRY
	// Ver11以上
	DIM version = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\svcVersion")
EXCEPT
	// Ver10以下
	version = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version")
ENDTRY

IFB VAL(TOKEN(".", version)) <= 10 THEN
	// Ver10以下
	DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
	IE.Visible = TRUE
	IFB IE.Offilne = TRUE THEN
		PRINT "オフライン作業中です"
	ELSE
		PRINT "オフライン作業中ではありません"
	ENDIF
	IE.Quit
ELSE
	// Ver11以上
	PRINT "オフライン作業は利用できません"	
ENDIF
結果
プレーンテキスト
オフライン作業は利用できません
使用関数

MSGBOXの種別の数値から表示されるボタンを取得

UWSC
HASHTBL type

type[BTN_YES] = "はい"
type[BTN_NO] = "いいえ"
type[BTN_OK] = "OK"
type[BTN_CANCEL] = "キャンセル"
type[BTN_ABORT] = "中止"
type[BTN_RETRY] = "再試行"
type[BTN_IGNORE] = "無視"

DIM num = INPUT("数値を入力してください。")

IF VAL(num) = ERR_VALUE THEN EXIT

PRINT num
PRINT "----------"

FOR n = 0 TO 6
	IF (num AND POWER(2, n)) <> 0 THEN PRINT type[POWER(2, n)]
NEXT

MSGBOX("以下のボタンが表示されます", num)
結果
プレーンテキスト
22
----------
キャンセル
はい
中止

文字列から数字部分のみ抽出

strに指定された文字列から数字の部分のみ抽出します。

UWSC
DIM str = "日本の税率は10%です。"
DIM res = ""

FOR i = 1 TO LENGTH(str)
	DIM s = COPY(str, i, 1)
	IF VAL(s) <> ERR_VALUE THEN res = res + s
NEXT

PRINT res
結果
プレーンテキスト
10
使用関数