1

10 進数の精度で double 値をデータベース テーブルに挿入する際に問題が発生しました。MS SQL Server バージョン 10.0.4000 を使用しています。以下は、小数点以下 4 桁の 10 進数列を含むサンプル テーブルです。

create table test (
test decimal (18,4))

MSSQL コンソールから値「36.78675」を挿入する36.7868と、フィールドが小数点以下 4 桁のみであるため、四捨五入されます。これで問題ありません。

DECLARE @T DECIMAL(18, 5)

SET @T = 36.78675

insert into test values(@T)

select * from test

しかし、Java コード (MS SQL JDBC ドライバー) を介して (準備されたステートメントを使用して) 同等の挿入を実行すると、データはテーブルに格納されます36.7867。のような値がある場合36.786750001、コンソールと JDBC の両方が に丸められ36.7868ます。私が使用する Java オブジェクトは double です。double 値で setDouble() を呼び出しています。ここでは、データ型を自動的に選択します。しかし、オブジェクトとデータ型を取る別の JDBC メソッドがあります。これを使用して、DECIMAL と FLOAT 型でテストしました。すべてが同じ結果を出しています。jdbc ドライバーも I-net に変更しました。同じ結果もあります。

丸めがドライバーによって異なる理由を知っている人はいますか? コンソールのように動作させる設定はありますか?

4

1 に答える 1