2011-11-08 20 views
0

私は準備ができています。私はこの問題は、データベース0.90000000000000000000に代わり0.9の保存されていることである準備文によるsetBigDecimalの問題?

stmt.setBigDecimal(BigDecimal.valueOf("0.9")) 

を呼び出します。

私はMicrosoft SQL Server JDBC Driver 3.0を使用します。

BigDecimalはドライバによって理解されていないか、ドライバが何か問題を起こしていませんか?

+0

その列の完全な定義は何ですか? –

+0

小数点(36、20) – Zardo

答えて

2

データ型がDECIMAL(36,20)であることを示しているので、それは完全に論理的です。36,20は36桁の精度を表します。小数点区切り文字の後に20があります。

DECIMAL(36,20)に0.9を保存すると、それはフィールドの指定された精度である0.90000000000000000000(小数点以下20桁)です。

+0

thxとして宣言されています。しかし、私はこれがそれほど巧妙ではないと思う...私はデータベースから値を読み取るよりも、小数点以下の20桁の位置を使ってすべての計算が行われることを意味する... – Zardo

+0

それがあなたの望むものでないならば、データベース内のDECIMALデータ型を選択するか、フィールドを小規模のDECIMAL型にキャストします。 –

1

列の精度は、これを引き起こしている可能性が高いです。特定の精度や位取りを持たずに数値として宣言された可能性があります。

+0

小数点(36、20) – Zardo