【发布时间】:2013-02-20 07:07:09
【问题描述】:
我在将双精度值插入具有小数精度的数据库表时遇到问题。我正在使用 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。也有同样的结果。
有人知道为什么通过驱动程序进行舍入的工作方式不同吗?是否有任何设置可以让它像控制台一样工作?
【问题讨论】:
-
说“SQL Server 控制台”,是指SQL Server Management Studio吗?
标签: java sql-server tsql jdbc rounding-error