将双精度值插入具有小数精度的数据库表时遇到问题。我正在使用 MS SQL Server 版本 10.0.4000 下面是一个小数列有 4 个小数位的示例表。
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 的。我用双值调用 setDouble() 。在这里它会自动选择数据类型。但是还有另一种 JDBC 方法,它采用对象和数据类型。使用它,我用 DECIMAL 和 FLOAT 类型进行了测试。所有人都给出了相同的结果。我什至将 jdbc 驱动程序更改为 I-net。也有同样的结果。
有人知道为什么通过驱动程序进行舍入的工作方式不同吗?是否有任何设置使其表现得像控制台?