引数
format
利用可能な形式コードは、以下のとおりです。形式の制限に基づいて $INUMBER を指示するために単一、あるいは組み合わせて指定できます。形式コードが入力されない場合、$INUMBER は、fnumber を可能な限り柔軟に検証します (詳細は "最大の柔軟性を提供する NULL 形式" を参照)。
コード |
説明 |
+ |
必須符号。fnumber 値には明示的な符合が必要です。0 にも符号を付ける必要があります (+0、または -0)。“L” もしくは “T” 形式コードによる規制がない限り、符号は先行でも後続でもかまいません。括弧を使用することはできません。符号を必要としない値は NAN のみです。これは、コード “D+” を使用している場合、符号を付けても付けなくても指定できます。 |
- |
符号なし。fnumber に符号がない場合もあります。 |
D |
$DOUBLE の数値。このコードは fnumber を IEEE 浮動小数点数に変換します。これは $DOUBLE(fnumber) と同等です。“D” が指定されている場合、引用符付きの文字列 “INF” および “NAN” を fnumber 値として入力できます。INF と NAN は、大文字と小文字の任意の組み合わせで、先頭または末尾の符号や括弧があってもなくても指定できます (NAN の場合、符号は許可されますが無視されます)。変異形の INFINITY および SNAN もサポートされています。 |
E または G |
E 記数法 (科学的記数法)。このコードでは、科学的記数法の形式の文字列として fnumber を指定できます。このコードは、科学的記数法で fnumber を指定することを許可しています (ただし必須ではありません)。 |
N |
NumericGroupSeparator なし。数値グループ・セパレータを使用できないようにします。この形式コードには、コンマ (,) 形式コードとの互換性がありません。 |
O |
ODBC ロケール。現在のロケールにオーバーライドし、代わりに PlusSign=+、MinusSign=-、DecimalSeparator=.、NumericGroupSeparator=,、NumericGroupSize=3 の値で標準 ODBC ロケールを使用します。この形式コードにはドット (.) 形式コードとの互換性がありません。 |
P |
負の数は括弧で囲む必要があります。非負数は符号を付けません。先頭または末尾の空白を付けても省略してもかまいません。 |
L |
先行符号。符号がある場合、fnumber の数字部分の前に置く必要があります。括弧は使用しません。 |
T |
後続符号。符号がある場合、fnumber の数字部分の後に置く必要があります。括弧は使用しません。 |
, |
fnumber で、現在のロケールのプロパティによって指定された形式が使用されることを予期します。NumericGroupSeparator (既定は ",") は、fnumber に表示される場合と表示されない場合がありますが、表示される場合は、小数点の左側に NumericGroupSize (既定は 3) 桁ごとに一貫して表示されている必要があります。 |
. |
現在のロケール設定に関係なく、標準的なヨーロッパ形式を要求します。DecimalSeparator はコンマ (,)、NumericGroupSeparator はピリオド (.)、NumericGroupSize は 3、PlusSign はプラス記号 (+)、MinusSign はマイナス記号 (-) を要求します。ピリオドはオプションですが、ピリオドが存在する場合は常に、小数点の左側に 3 桁ごとに表示されなければなりません。 |
"+"、"-" および "P" 形式コードが存在しないとき
format に "+"、"-"、または "P" コードのいずれも含まれていないときには、fnumber に以下のいずれかを含めることができます。
"L"、"T" および "P" 形式コードが存在しないとき
format が "L"、"T" または "P" 形式コードのいずれも含まないときは、fnumber に付いている符号は先行でも後続でもかまいません (ただし、両方には付きません)。
形式コード “,” および “.” が存在しないとき
format に "," 形式コードまたは "." 形式コードのいずれも含まれないとき、オプションとして fnumber は、(存在する場合は) DecimalSeparator の左右いずれかの任意の場所に NumericGroupSeparator 記号を付けることができます。しかし、各 NumericGroupSeparator は、その左右両隣に少なくとも 1 桁を持たなければなりません。format が “N” を含む場合、NumericGroupSeparator 記号は使用できません。
相互排他的形式コード
形式コードには、お互いに競合するものもあります。形式コードの以下の各組み合わせは、相互排他的であり、エラーが発生します。
-
“-+” は <FUNCTION> エラーになります。
-
“-P” または “+P” は <SYNTAX> エラーになります。
-
“TP” または “LP” は <SYNTAX> エラーになります。
-
“TL” は <FUNCTION> エラーになります。
-
“,.” は <FUNCTION> エラーになります。
-
“,N” は <FUNCTION> エラーになります。
-
“.O” は <FUNCTION> エラーになります。
さらに、無効な形式コード文字を指定した場合、<FUNCTION> エラーが発生します。
最大の柔軟性を提供する NULL 形式
format を NULL 文字列として指定できます。これは、NULL 形式と呼ばれています。NULL 形式が指定されると、$INUMBERは以下の記号規則のうちのいずれかを使用して、fnumber 値を受け入れます。
NULL 形式を指定したとき、fnumber は、オプションとして、(存在する場合は) DecimalSeparator の左右いずれかの任意の場所に NumericGroupSeparator 記号を持つことがあります。しかし、各 NumericGroupSeparator は、その左右両隣に少なくとも 1 桁を持たなければなりません。符号に関する規約は柔軟ですが、前と後の空白とゼロは無視されます。したがって、以下の 2 つのコマンド
WRITE !,$INUMBER("+1,23,456,7.8,9,100","")
WRITE !,$INUMBER("0012,3456,7.891+","")
は両方とも有効で、既定のロケールに対応してフォーマットされた同じ数を返します。しかし、以下の例はどうでしょうか。
WRITE $INUMBER("1,23,,345,7.,8,9,","")
これは、隣接したコンマ、隣接したピリオドとコンマ、末尾のコンマなので無効です。これによって <ILLEGAL VALUE> エラーが発生します。
すべての形式に共通する動作
指定した形式コードに関係なく、$INUMBER は常に前と後にある空白スペースやゼロを無視しますが、以下の特性のいずれかがある場合 fnumber は無効であると見なします。
例
これらの例は、異なる形式がどのように $INUMBER の動作に影響するかを示しています。すべて、現在のロケールが既定のロケールであると仮定します。
以下の例では、"L" 形式コードのため $INUMBER は先行マイナス符号を受け入れ、-123456789.12345678 を返します。
WRITE $INUMBER("-123,4,56,789.1234,5678","L")
以下の例では、符号が先行していながら、"T" 形式コードで後続符号を使用するように指定しているので、$INUMBER は <ILLEGAL VALUE> エラーを生じます。
WRITE $INUMBER("-123,4,56,789.1234,5678","T")
以下の例では、最初の $INUMBER は成功し、負の数を返します。2番目の $INUMBER では、fnumber は符号を含んでいますが、"P" 形式コードでは、負の数に符号を付けるのではなく括弧で囲むように指定されているので、<ILLEGAL VALUE> エラーが発生します。
WRITE !,$INUMBER("(123,4,56,789.1234,5678)","P")
WRITE !,$INUMBER("-123,4,56,789.1234,5678","P")
以下の例では、符号がありながら、"-" 形式コードで符号で使用しないように指定しているので、$INUMBER は <ILLEGAL VALUE> エラーを生じます。
WRITE $INUMBER("-123,4,56,789.1234,5678","-")
以下の例では、$INUMBER は失敗しますが、符号の不正使用を原因とするエラーは発生せず、erropt として指定されている文字列 "ERR" をその値として返します。
WRITE $INUMBER("-123,4,56,789.1234,5678","-","ERR")
以下の例は、-23456789.123456789 を返します。先行符号の使用は、"L" で指定される形式に従っており、小数点の左側に 3 桁ごとに必ずコンマがあり、右側にはコンマがないことは、"," コードで指定される厳密な形式に従っているため、$INUMBER は指定した fnumber を有効な値として受け入れます。
WRITE $INUMBER("-23,456,789.123456789","L,")
以下の例で、“E” コードは科学的記数法の文字列の数値への変換を許可しています。すべての形式コードは数値リテラルとして科学的記数法をサポートしますが、文字列として科学的記数法をサポートするのは “E” (または “G”) のみです。この例では、変数および連結を使用して科学的記数法の文字列値を提供します。
SET num=1.234
SET exp=-14
WRITE $INUMBER(1.234E-14,"E","E-lit-err"),!
WRITE $INUMBER(num_"E"_exp,"E","E-string-err"),!
WRITE $INUMBER(1.234E-14,"L","L-lit-err"),!
WRITE $INUMBER(num_"E"_exp,"L","L-string-err"),!
以下の例では、小数および定数 pi の “L” コードおよび “D” コードにより返される値を比較します。“D” コードは IEEE 浮動小数点 ($DOUBLE) 数に変換します。
WRITE $INUMBER(1.23E-23,"L"),!
WRITE $INUMBER(1.23E-23,"D"),!
WRITE $INUMBER($ZPI,"L"),!
WRITE $INUMBER($ZPI,"D"),!