Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$ISVALIDDOUBLE

$DOUBLE 数値を検証し、ブーリアン値を返します。オプションで、範囲のチェックも行います。

Synopsis

$ISVALIDDOUBLE(num,scale,min,max)

パラメータ

num 検証される数値。数値、文字列値、変数名、あるいは有効な ObjectScript 式にできます。有効な数字の場合、num は IEEE 倍精度浮動小数点型に変換されます。
scale オプションminmax の範囲を比較する場合に有効な小数点以下の桁数。
min オプション — 許容範囲内の最小値。指定した値は、IEEE 倍精度浮動小数点型に変換されます。指定されない場合、min は既定で $DOUBLE(“-INF”) に設定されます。
max オプション — 許容範囲内の最大値。指定した値は、IEEE 倍精度浮動小数点型に変換されます。指定されない場合、max は既定で $DOUBLE(“INF”) に設定されます。

説明

$ISVALIDDOUBLE 関数は、num が IEEE 倍精度浮動小数点数の検証テストに合格したかどうかを判別し、ブーリアン値を返します。オプションで、自動的に IEEE の数に変換される min 値と max 値を使用して範囲チェックも行います。scale パラメータは、範囲チェック時に比較する小数桁数を指定するために使用されます。num は適切に構成された IEEE 倍精度数値であることをブーリアン値の 1 は意味し、指定された場合は範囲チェックに合格したことを意味します。$ISVALIDDOUBLE は検証関数であり、num がデータ型 DOUBLE の数であるかどうかを判別したり、$DOUBLE 関数を使用して生成されたものであるかどうかを判別したりはしません。

$ISVALIDDOUBLE は、アメリカ形式の数 (ピリオド (.) を小数点区切り文字として使用する) を評価します。これは、ヨーロッパ形式の数 (コンマ (,) を小数点区切り文字として使用する) は評価しません。$ISVALIDDOUBLE は、数値グループ区切り文字を含む数を有効と見なしません。現在のロケールに関わらず、コンマまたは空白スペースを含む数に対して 0 (無効) を返します。

パラメータ

num

検証される数は整数、小数、または科学的記数法の数 (文字 “E” または “e” 付き) のいずれかです。文字列、式、または数に解決される変数のいずれかになることもあります。符号付きや符号なし、先頭、または末尾に 0 が付いていることもあります。

ObjectScript は、検証のために $ISVALIDDOUBLE に数値を渡す前に、その数値をキャノニック形式に変換します。したがって、数式、数値の連結、先頭にある複数の + 記号および - 記号は、すべて関数によって評価前に変換されます。数値文字列は、評価前にキャノニック形式に変換されません。ただし、数値文字列の先頭に + 記号が付いている場合、数値文字列の数値評価 (およびキャノニック形式への変換) が強制実行されます。

検証は、以下の場合に失敗 ($ISVALIDDOUBLE が 0 を返す) します。

  • num が 0-9、先頭の +、– 符号、小数点(.)、および “E” または “e” 以外の任意の文字を含む場合。

  • num が複数の + または – 符号、小数点、文字 "E" または "e" を含む場合。num が数値の場合、ObjectScript は、先頭にある複数の + 記号および - 記号を変換します。num が数値文字列の場合、先頭の + 記号や - 記号を複数含めることはできません。

  • オプションの + または – 符号は、num の最初の文字ではありません。

  • 10 進法の指数を表す文字 “E”、もしくは “e” の後に数値文字列の整数が続かない場合。整数が続かない数 "E" では、<SYNTAX> エラーが返されます。

  • num が NULL 文字列の場合。

num が INF である場合 (+ 記号や – 記号の有無は関係ありません)、それは有効な $DOUBLE 数です。$ISVALIDDOUBLE により返されるブーリアンは、指定の範囲チェックに num が適合しているかどうかによって決まります。

num が NAN の場合、$ISVALIDDOUBLE からは 1 が返されます。

scale

scale パラメータは、範囲チェック時に比較する小数桁数を指定するために使用されます。scale には整数値を指定します。scale 値の小数桁数は無視されます。他のパラメータで指定された小数桁数よりも大きい scale 値を指定することができます。-1 の scale 値を指定することもできます。それ以外の負の scale 値はすべて、<FUNCTION> エラーが返されます。

非負数の scale 値を指定すると、minmax の範囲チェック実行前に、num がその小数桁数に丸められます。scale値に 0 を指定すると、範囲チェック実行前に num は整数値 (3.9 = 4) に丸められます。scale 値に -1 を使用すると、範囲チェック実行前に num は整数値 (3.9 = 3) に切り捨てられます。指定されたすべての桁を丸めたり、切り捨てることなく比較するには、scale パラメータを省略します。数値以外の scale 値や NULL 文字列は、scale 値 0 に相当します。

丸めは、–1 を除くすべての scale 値に対して実行されます。5 以上の値は常に切り上げられます。

scale パラメータ値により、num 値の端数を丸めた値、または切り捨てた値を使用して評価が行われます。num 変数の実際の値は、$ISVALIDDOUBLE 処理によって変更されません。

scale パラメータを省略する場合、コンマはプレースホルダとして保持しておきます。

min と max

許容最小値や許容最大値、またはその両方を指定できます。あるいは、一切指定なしでもかまいません。指定された場合、(scale 演算後の) num の値は min の値以上で、max の値以下でなければなりません。値は範囲チェックに使用される前に IEEE 浮動小数点数に変換されます。min または max 値として NULL 文字列を指定した場合、これは 0 に相当します。値がこの条件に合わない場合、$ISVALIDDOUBLE は 0 を返します。

NAN 値は、min または max の値にかかわらず、常に有効と見なされます。

パラメータを省略する場合、コンマはプレースホルダとして保持しておきます。例えば、scale を省略して minmax を指定するとき、または min を省略して max を指定するときなどです。末尾のコンマは無視されます。

以下の例では、$ISVALIDDOUBLE の各呼び出しはすべて 1 (有効な値) を返します。

   WRITE !,$ISVALIDDOUBLE(0)        ; All integers OK
   WRITE !,$ISVALIDDOUBLE(4.567)    ; Fractional numbers OK
   WRITE !,$ISVALIDDOUBLE("4.567")  ; Numeric strings OK
   WRITE !,$ISVALIDDOUBLE(-.0)      ; Signed numbers OK
   WRITE !,$ISVALIDDOUBLE(-+--123)  ; Multiple signs resolved for numbers OK
   WRITE !,$ISVALIDDOUBLE(+004.500) ; Leading/trailing zeroes OK
   WRITE !,$ISVALIDDOUBLE(4E2)      ; Scientific notation OK   

以下の例では、$ISVALIDDOUBLE の各呼び出しはすべて 0 (無効な値) を返します。

   WRITE !,$ISVALIDDOUBLE("")        ; Null string is invalid
   WRITE !,$ISVALIDDOUBLE("4,567")   ; Commas are not permitted
   WRITE !,$ISVALIDDOUBLE("4A")      ; Invalid character
   WRITE !,$ISVALIDDOUBLE("-+--123") ; Multiple signs not resolved for strings

以下の例では、INF (無限大) および NAN (非数値) が厳密には数字でなくても、$ISVALIDDOUBLE の各呼び出しはすべて 1 (有効な値) を返します。

   WRITE !,$ISVALIDDOUBLE($DOUBLE($ZPI))  ; DOUBLE numbers OK
   WRITE !,$ISVALIDDOUBLE($DOUBLE("INF")) ; DOUBLE INF OK
   WRITE !,$ISVALIDDOUBLE($DOUBLE("NAN")) ; DOUBLE NAN OK

以下の例では、min 値を指定すると、-INF は除外されますが、INF は除外されません。

   WRITE !,$ISVALIDDOUBLE($DOUBLE("-INF"),,99999999999)
   WRITE !,$ISVALIDDOUBLE($DOUBLE("INF"),,99999999999)

以下の例は、min パラメータや max パラメータの使用法を示しています。以下はすべて、1 (数は有効で、範囲チェックにも合格する) を返します。

   WRITE !,$ISVALIDDOUBLE(4,,3,5)    ; scale can be omitted
   WRITE !,$ISVALIDDOUBLE(4,2,3,5)   ; scale can be larger than 
                                     ; number of fractional digits
   WRITE !,$ISVALIDDOUBLE(4,0,,5)    ; min or max can be omitted
   WRITE !,$ISVALIDDOUBLE(4,0,4,4)   ; min and max are inclusive
   WRITE !,$ISVALIDDOUBLE(-4,0,-5,5) ; negative numbers
   WRITE !,$ISVALIDDOUBLE(4.00,2,04,05) ; leading/trailing zeros
   WRITE !,$ISVALIDDOUBLE(.4E3,0,3E2,400) ; base-10 exponents expanded

以下の例は、min パラメータと max パラメータと一緒に scale パラメータを使用する方法を示しています。以下はすべて、1 (数は有効で、範囲チェックにも合格する) を返します。

   WRITE !,$ISVALIDDOUBLE(4.55,,4.54,4.551)
     ; When scale is omitted, all digits of num are checked.
   WRITE !,$ISVALIDDOUBLE(4.1,0,4,4.01)
     ; When scale=0, num is rounded to an integer value
     ; (0 fractional digits) before min & max check.
   WRITE !,$ISVALIDDOUBLE(3.85,1,3.9,5)
     ; num is rounded to 1 fractional digit, 
     ; (with values of 5 or greater rounded up) 
     ; before min check.
   WRITE !,$ISVALIDDOUBLE(4.01,17,3,5) 
     ; scale can be larger than number of fractional digits.
   WRITE !,$ISVALIDDOUBLE(3.9,-1,2,3)
     ; When scale=-1, num is truncated to an integer value

メモ

$ISVALIDDOUBLE と $ISVALIDNUM の比較

$ISVALIDDOUBLE 関数と $ISVALIDNUM 関数は両方ともアメリカ形式の数を検証し、ブーリアン値 (0 または 1) を返します。

  • どちらの関数も、有効な数字として、$DOUBLE によって返された INF、–INF、NAN の値を受け入れます。また、$ISVALIDDOUBLE は、有効な数字として、大文字小文字を区別しない文字列 “NAN”、“INF”、および “Infinity”、“sNAN”、プラス記号またはマイナス記号が先頭に付いた任意のこれらの文字列を受け入れます。$ISVALIDNUM は、これらの文字列すべてを無効として拒否し、0 を返します。

       WRITE !,$ISVALIDNUM($DOUBLE("NAN"))    ; returns 1
       WRITE !,$ISVALIDDOUBLE($DOUBLE("NAN")) ; returns 1
       WRITE !,$ISVALIDNUM("NAN")             ; returns 0
       WRITE !,$ISVALIDDOUBLE("NAN")          ; returns 1
  • これら 2 つの関数は、符号付き、または符号なしの整数 (- 0 を含む)、科学的記数法の数 (“E” または “e” 付き)、実数 (123.45)、および数値文字列 (“123.45”) を解析します。

  • どちらの関数も、ヨーロッパ形式の DecimalSeparator 文字 (コンマ (,)) および NumericGroupSeparator 文字 (アメリカ形式はコンマ (,)、ヨーロッパ形式はピリオド (.)) は認識しません。例えば、現在のロケール設定に関わらず、どちらも文字列 “123,456” を無効な数値として拒否します。

  • 2 つの関数は、数字に対して先頭の複数の符号 (+ と –) を解析します。どちらも引用符付き数値文字列に入った先頭の複数の符号を受け入れません。

関連項目

FeedbackOpens in a new tab