数値を検証し、ブーリアン値を返します。オプションで、範囲のチェックも行います。
Synopsis
$ISVALIDNUM(num,scale,min,max)
$ISVALIDNUM 関数は
num を検証し、ブーリアン値を返します。オプションで、
min 値と
max 値を使用して範囲チェックも行います。
scale パラメータは、範囲チェック時に比較する小数桁数を指定するために使用されます。ブーリアン値 1 は、
num が適切に構成された数であることを意味し、指定された場合は範囲チェックを渡します。
検証される数は整数、10 進数、または指数 (文字 E または e) のいずれかです。文字列、式、または数に解釈される変数のいずれかになることもあります。符号付きや符号なし、先頭、または末尾に 0 がついていることもあります。検証は、以下の場合に失敗 (
$ISVALIDNUM が 0 を返す) します。
-
num が 09、先頭の +、 符号、小数点(.)、および指数を表す E または e 以外の任意の文字を含む場合。
-
num が複数の + または 符号、小数点、文字 E または e を含む場合。
-
オプションの + または 符号は、
num の最初の文字ではありません。
-
指数を表す文字 E、もしくは e に数値の整数が続いていない場合。整数が続かない数 E では、<SYNTAX> エラーが返されます。
-
scale パラメータは、範囲チェック時に比較する小数桁数を指定するために使用されます。
scale に対する整数値を指定します。
scale 値の小数桁数は無視されます。他のパラメータで指定された小数桁数よりも大きい
scale 値を指定することができます。1 の
scale 値を指定することもできます。それ以外の負の
scale 値はすべて、<FUNCTION> エラーが返されます。
非負数の
scale 値を指定すると、
min と
max の範囲チェック実行前に、
num がその小数桁数に丸められます。
scale値に 0 を指定すると、範囲チェック実行前に
num は整数値 (3.9 = 4) に丸められます。
scale値に 1 を使用すると、範囲チェック実行前に
num は整数値 (3.9 = 3) に切り捨てられます。指定されたすべての桁を丸めたり、切り捨てることなく比較するには、
scale パラメータを省略します。非数値の
scale 値や NULL 文字列は、
scale 値 0 に相当します。
丸めは、 1 を除くすべての
scale 値に対して実行されます。5 以上の値は常に切り上げられます。
scale パラメータを省略する場合、コンマはプレースホルダとして保持しておきます。
許容最小値や許容最大値、またはその両方を指定できます。 あるいは、一切指定なしでも構いません。指定された場合、(
scale 演算後の)
num の値は
min の値以上で、
max の値以下でなければなりません。
min または
max 値として NULL 文字列を指定した場合、これは 0 に相当します。値がこの条件に合わない場合、
$ISVALIDNUM は 0 を返します。
パラメータを省略する場合、コンマはプレースホルダとして保持しておきます。例えば、
scale を省略して
min か
max を指定するとき、または
min を省略して
max を指定するときなどです。末尾のコンマは無視されます。
WRITE !,$ISVALIDNUM(0) ; All integers OK
WRITE !,$ISVALIDNUM(4.567) ; Decimal numbers OK
WRITE !,$ISVALIDNUM("4.567") ; Numeric strings OK
WRITE !,$ISVALIDNUM(-.0) ; Signed numbers OK
WRITE !,$ISVALIDNUM(+004.500) ; Leading/trailing zeroes OK
WRITE !,$ISVALIDNUM(4E2) ; Exponents OK
WRITE !,$ISVALIDNUM("") ; Null string is invalid
WRITE !,$ISVALIDNUM("4,567") ; Commas are not permitted
WRITE !,$ISVALIDNUM("4A") ; Invalid character
以下の例は、
min パラメータや
max パラメータの使用法を示しています。以下はすべて、1 を返します (数は有効で、範囲チェックも渡します)。
WRITE !,$ISVALIDNUM(4,,3,5) ; scale can be omitted
WRITE !,$ISVALIDNUM(4,2,3,5) ; scale can be larger than
; number of decimal digits
WRITE !,$ISVALIDNUM(4,0,,5) ; min or max can be omitted
WRITE !,$ISVALIDNUM(4,0,4,4) ; min and max are inclusive
WRITE !,$ISVALIDNUM(-4,0,-5,5) ; negative numbers
WRITE !,$ISVALIDNUM(4.00,2,04,05) ; leading/trailing zeros
WRITE !,$ISVALIDNUM(.4E3,0,3E2,400) ; exponents expanded
以下の例は、
min パラメータと
max パラメータと一緒に
scale パラメータを使用する方法を示しています。以下はすべて、1 を返します (数は有効で、範囲チェックも渡します)。
WRITE !,$ISVALIDNUM(4.55,,4.54,4.551)
; When scale is omitted, all digits of num are checked.
WRITE !,$ISVALIDNUM(4.1,0,4,4.01)
; When scale=0, num is rounded to an integer value
; (0 decimal digits) before min & max check.
WRITE !,$ISVALIDNUM(3.85,1,3.9,5)
; num is rounded to 1 decimal digit,
; (with values of 5 or greater rounded up)
; before min check.
WRITE !,$ISVALIDNUM(4.01,17,3,5)
; scale can be larger than number of decimal digits.
WRITE !,$ISVALIDNUM(3.9,-1,2,3)
; When scale=-1, num is truncated to an integer value
$ISVALIDNUM、$NORMALIZE、および $NUMBER の比較
これら 3 つの関数では、検証の条件は異なります。必要に応じて、それぞれの関数を使いわけてください。
-
これら 3 つの関数は、符号付き、または符号なしの整数 (- 0 を含む)、指数 (E または e 付き)、および 10 進数を解析します。ただし、
$NUMBER は 10 進数 (10 進数になる負の指数を含む) を拒否するように (I 形式を使用して) 設定できます。3 つの関数はすべて、両方の数 (123.45) と数値文字列 (123.45) を解析します。
-
先頭と末尾の 0 は、この 3 つの関数によってストリッピングします。10 進文字は、ゼロでない値が続かない限りストリッピングされます。
-
NumericGroupSeparator を含む数値文字列。
$NUMBER は
format パラメータ (または現在のロケールに対する既定値) を基にして、NumericGroupSeparator 文字 (アメリカ形式はコンマ (,)、ヨーロッパ形式はピリオド (.) もしくはアポストロフィ (') と 10 進文字 (アメリカ形式はピリオド (.)、ヨーロッパ形式はコンマ (,)) を解析します。また、NumericGroupSeparator 文字の任意の数を許可し、削除します。例えばアメリカ形式は、数 123456.99 として 123,,4,56.99 を検証します。
$NORMALIZE は、NumericGroupSeparator 文字を認識しません。これは、非数値文字を検出するまで、文字ごとに検証します。例えば 123,456.99 を、数 123 として検証します。
$ISVALIDNUM は、文字列 123,456 を無効な数値として拒否します。
-
先頭の複数の符号 (+ と - ) は、数に対する 3 つすべての関数によって解釈されます。ただし、
$NORMALIZE だけは、引用符付き数値文字列で先頭の複数の符号を受け入れます。
-
末尾の + と - 符号。3 つの関数すべて、数の末尾の符号を受け入れません。しかし、引用符付き数値文字列では、
$NUMBER は末尾の符号を 1 つ (唯一) 解析し、
$NORMALIZE は複数の末尾の符号を解析し、
$ISVALIDNUM は末尾に符号を含む文字列をすべて無効な数として受け入れません。
-
-
複数の 10 進文字を含む、数値文字列。
$NORMALIZE は 2 番目の 10 進文字を検出するまで、文字ごとに検証を行います。例えばアメリカ形式は、123.4.56 を数 123.4 として検証します。
$NUMBER と
$ISVALIDNUM は、1 つ以上の 10 進文字を含む任意の文字列を無効な数として受け入れません。
他の非数値文字を含む数値文字列。
$NORMALIZE は、アルファベット文字を検出するまで、文字ごとに検証を行います。これは、123A456 を数 123 として検証します。
$NUMBER と
$ISVALIDNUM は文字列全体を検証し、123A456 を無効な数として受け入れません。
-