数値を検証し、返します。オプションで数の丸めや範囲チェックを行います。
Synopsis
$NUMBER(num,format,min,max)
$NUM(num,format,min,max)
$NUMBER 関数は、指定した形式を使用して、
num 数値の変換と妥当性検証を実行します。さまざまな句読点形式の数字を受け取り、Caché キャノニック形式の数字を返します。
-
10 進文字は、"." または "," のいずれかを使用しますが、"." はアメリカ式、"," はヨーロッパ式の小数点検証用の変換方式を示します。これらのうちいずれかの文字を指定するか、あるいは 10 進文字を使用しません。10 進文字を省略する場合、その数は現在のロケールの DecimalSeparator を取得します。
-
丸め係数は、小数点何桁で丸めを行うかを示す整数です。整数の前には、+ 符号または - 符号を付けます。丸め係数が正数 (あるいは符号無し) の場合、number は指定された小数桁で丸めます。丸め係数が 0 の場合、number は整数に丸めます。丸め係数が負の整数の場合、number は小数点区切り文字の左にある数字に対し指定された桁数で丸めます。例えば、丸め係数が -2 の場合、234.45 は 200 に丸められます。数字の "5" は常に繰り上がります。したがって、丸め係数が 1 の場合、123.45 は 123.5 になります。
-
整数表示文字 : 文字 "I" (大文字または小文字) は、number が必ず整数値であることを指定します。
許容最小値や許容最大値、またはその両方を指定できます。あるいは、一切指定なしでもかまいません。指定する場合、
num 値 (丸め実行後) は、
min 値以上、
max 値以下でなければなりません。
min または
max 値として NULL 文字列を指定した場合、これは 0 に相当します。値がこの基準に合わない場合、
$NUMBER は NULL 文字列を返します。
したがって、以下の例で 1 つ目は、
num (4.0) が
max (4) と同等なので、有効です。2 つ目の例も、
num (4.003) が
max (4) と形式範囲内 (小数点以下 2 桁) で同等なので、有効です。しかし 3 つ目の例は、
$NUMBER が
num を形式範囲内で
maxより大きい値である (4.01) まで丸めを行ってしまうため、有効ではありません。その結果、NULL 文字列を返します。
WRITE !,$NUMBER(4.0,2,0,4)
WRITE !,$NUMBER(4.003,2,0,4)
WRITE !,$NUMBER(4.006,2,0,4)
コンマをプレース・ホルダとして保持し、パラメータの削除を行うことができます。以下の例で、1 行目は
max 値を設定しますが、
format または
min の値は設定されません。2 行目では、
format 値を設定しませんが、ゼロと等しい NULL 文字列の
min 値を設定します。したがって、1 行目は 7 を返し、2 行目は
min の基準を満たさないので、NULL 文字列を返します。
SET max=10
WRITE !,$NUMBER(-7,,,max)
WRITE !,$NUMBER(-7,,"",max)
末尾のコンマは指定できません。以下の結果は <SYNTAX> エラーになります。
WRITE $NUMBER(mynum,,min,)
$NUMBER は以下の一連の変換と検証を実行します。数字の妥当性検証に失敗した場合、
$NUMBER は長さゼロの文字列 ("") を返します。すべての検証に合格した場合、Caché 標準の数字に変換した結果を返します。
-
$NUMBER は 10 進文字形式を使用して、いずれの文字がグループ・セパレータであるか、またすべてのグループ・セパレータ文字をストリッピングするか (数の位置に関係なく) を決定します。使用する規則は以下のとおりです。
format で指定される 10 進文字がピリオド (.) の場合、グループ・セパレータはコンマ (,) またはアポストロフィ (')です。
format で指定される 10 進文字がコンマ (,) の場合、グループ・セパレータはピリオド (.) またはアポストロフィ (')です。
format に 10 進文字が指定されていない場合、グループ・セパレータは、現在のロケールの NumericGroupSeparator プロパティの値となります。
-
$NUMBER は、数字が規則に合っているかどうか妥当性の検証を行います。適格な number は以下のいずれかを含みます。
-
-
上述の任意の小数点文字 (1 つまたは指定なしで、複数指定は不可)。
-
任意のプラス (+) あるいはマイナス (-) 符号 (先頭あるいは末尾に置き、複数指定は不可)。
-
負の値 (借方) を示す数を囲む任意の括弧。括弧内の数字には符号を付けません。
-
整数の後に続く "E" (大文字もしくは小文字) によって示される、任意の指数。"E" を指定する場合は、指数が存在する必要があります。指数の前に符号が付く場合もあります。
-
整数表示文字が
format 内に存在する場合、
$NUMBER は整数をチェックします。整数は小数表示文字を含むことはできません。数値文字列 ("123.45") と数 (123.45) は、個別に解析されます。数値文字列は、小数表示文字の後に数字の桁がない、あるいは拡張指数や数の丸めにより小数桁が削除されていたとしても、整数テストには失敗します。数は、これらの検証テストに成功します。数が整数表示テストに失敗した場合、
$NUMBER は NULL 文字列 ("") を返します。
-
$NUMBER は number を Caché 標準数値に変換します。指数記数法を展開し、括弧を負の符号文字と置き換え、先頭あるいは末尾にあるゼロを切り離し、後にゼロでない数字桁が続かない小数表示文字を削除します。
-
$NUMBER は (存在する場合は) 丸め係数を使用して、指定された桁に数字を丸めます。その後、後に数字が何も続かない場合は、先頭あるいは末尾にあるゼロと小数表示文字を切り離します。
-
$NUMBER は、最小値が指定されている場合、その値に対し数字の妥当性を検証します。
-
$NUMBER は、最大値が指定されている場合、その値に対し数字の妥当性を検証します。
-