TO_BINARY_DOUBLE

構文

目的

TO_BINARY_DOUBLEは、exprを倍精度浮動小数点数に変換します。

  • exprは、CHARVARCHAR2NCHARまたはNVARCHAR2の型の文字列、NUMBERBINARY_FLOATまたはBINARY_DOUBLEの型の数値、あるいはNULLと評価される任意の式にすることができます。exprBINARY_DOUBLEの場合、このファンクションはexprを戻します。exprがNULLと評価されると、関数はNULLを返します。それ以外の場合は、exprBINARY_DOUBLE値に変換されます。

  • オプションのDEFAULT return_value ON CONVERSION ERROR句により、exprからBINARY_DOUBLEへの変換中にエラーが発生した場合にこのファンクションで戻される値を指定できます。exprを評価するときにエラーが発生した場合、この句による影響はありません。return_valueは式またはバインド変数にすることができ、CHARVARCHAR2NCHARまたはNVARCHAR2の型の文字列、NUMBERBINARY_FLOATまたはBINARY_DOUBLEの型の数値、あるいはNULLと評価される必要があります。exprBINARY_DOUBLEに変換する場合と同じ方法で、return_valueBINARY_DOUBLEに変換されます。return_valueBINARY_DOUBLEに変換できない場合は、エラーが戻されます。

  • オプションの'fmt'引数および'nlsparam'引数の用途は、TO_NUMBERファンクションと同じです。これらの引数を指定した場合は、exprreturn_value (指定した場合)は、それぞれ文字列またはNULLにする必要があります。いずれかが文字列である場合は、fmt引数とnlsparam引数が使用されて、文字列がBINARY_DOUBLE値に変換されます。

exprまたはreturn_valueが次の文字列に評価される場合、これらは次のように変換されます。

  • 文字列'INF'(大/小文字は区別されない)は、正の無限大に変換されます。

  • 文字列'-INF'(大/小文字は区別されない)は、負の無限大に変換されます。

  • 文字列'NaN'(大/小文字は区別されない)は、NaN(非数値)に変換されます。

expr文字列には、浮動小数点数の書式要素(FfDまたはd)は使用できません。

文字列またはNUMBERからBINARY_DOUBLEへの変換は、正確に行われない場合があります。これは、NUMBERおよび文字列型では10進精度、BINARY_DOUBLEでは2進精度を使用して数値を表現するためです。

BINARY_FLOATからBINARY_DOUBLEへの変換は正確に行われます。

関連項目:

「TO_CHAR (数値)」および「浮動小数点数」を参照してください。

次の例では、それぞれ異なる数値データ型の3つの列を持つ次の表を使用します。

CREATE TABLE float_point_demo
  (dec_num NUMBER(10,2), bin_double BINARY_DOUBLE, bin_float BINARY_FLOAT);

INSERT INTO float_point_demo
  VALUES (1234.56,1234.56,1234.56);

SELECT * FROM float_point_demo;

   DEC_NUM BIN_DOUBLE  BIN_FLOAT
---------- ---------- ----------
   1234.56 1.235E+003 1.235E+003

次の例では、NUMBERデータ型の値をBINARY_DOUBLEデータ型の値に変換します。

SELECT dec_num, TO_BINARY_DOUBLE(dec_num)
  FROM float_point_demo;

   DEC_NUM TO_BINARY_DOUBLE(DEC_NUM)
---------- -------------------------
   1234.56                1.235E+003

次の例では、dec_num列およびbin_double列から抽出されたダンプ情報を比較します。

SELECT DUMP(dec_num) "Decimal",
   DUMP(bin_double) "Double"
   FROM float_point_demo;

Decimal                     Double
--------------------------- ---------------------------------------------
Typ=2 Len=4: 194,13,35,57   Typ=101 Len=8: 192,147,74,61,112,163,215,10

次の例では、指定した式をBINARY_DOUBLE値に変換できないため、デフォルト値の0が戻されます。

SELECT TO_BINARY_DOUBLE('2oo' DEFAULT 0 ON CONVERSION ERROR) "Value"
  FROM DUAL;

     Value
----------
         0