2011-10-21 7 views
0

私はSQL Serverデータベースで作業しており、数値型がデータに十分な大きさであることを確認する必要があります。Java doubleとOracleがSQL Serverの数値に浮動小数点

Java doubleとOracle float(126)の2つのソースがあります。

SQL Serverの種類はnumeric(30,10)またはnumeric(15,8)です。

私はJavaは+ 308 1.7976931348623157Eから-4.9E-324の値を格納することができる倍増SQL Serverのnumeric(30,10)は精度のわずか30桁あり、小数点以下10桁を可能にしながら、オラクルfloat(126)は、精度の約38桁を有することを読み出しますポイント。

numeric(30,10)doublefloat(126)では安全ではないため、精度やオーバーフローが発生する可能性があります。これらはDOUBLE PRECISIONに変更する必要がありますか?

答えて

2

SQLのNUMERICは、の12進数タイプです。 DOUBLE PRECISIONはバイナリの浮動小数点型ですが、通常IEEE 754倍精度(64ビット)にマッピングされています。これはJavaのdoubleで使用されているフォーマットとまったく同じです。 FLOATもSQL標準に存在するバイナリタイプなので、SQL Server上にも存在する必要がありますが、その精度は実装に依存します。SQL Server上でサイズが小さければ、何もできません。

+0

[microsoft docs](http://msdn.microsoft.com/en-us/library/ms173773.aspx)によれば、設定可能な最高値は1.79E + 308で、OP要件に一致します。奇妙なことに、下限は、私が期待していなかったように思われません。 –

+0

@Damien_The_Unbeliever:64ビット浮動小数点の範囲です。 OracleがFLOAT(126)を許可している場合、その範囲はもっと大きくなければなりません。下限は、最小の「正規」値と最小正規化されていない値のリストがあるため、異なります。 –