我在使用一些小數精度將一個double值插入到數據庫表時遇到問題。我正在使用MS SQL Server版本10.0.4000 下面是一個示例表,其中十進制列有4位小數。控制檯和JDBC中的十進制截斷/舍入差異
create table test (
test decimal (18,4))
當我插入通過MSSQL控制檯值「36.78675」,因爲該領域是僅有的4位小數它被四捨五入36.7868
。這可以。
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。也有同樣的結果。
有人知道爲什麼四捨五入通過驅動程序工作不同嗎?是否有任何設置使其表現得像控制檯?
說「SQL Server控制檯」,你的意思是SQL Server Management Studio? – abatishchev 2013-02-20 07:16:14
@abatishchev是的 – 2013-02-20 09:23:39