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 に変更しました。同じ結果もあります。
丸めがドライバーによって異なる理由を知っている人はいますか? コンソールのように動作させる設定はありますか?