Java 从SQL Server读入ResultSet在SQL Server 2014和SQL Server 2016中会得到不同的结果

Java 从SQL Server读入ResultSet在SQL Server 2014和SQL Server 2016中会得到不同的结果,java,sql-server,jdbc,Java,Sql Server,Jdbc,我有两个数据库(SQL Server 2014和SQL Server 2016),它们具有相同的表和相同的数据。表有一个浮动字段。 我的sql查询如下 从myData中选择四舍五入(val,8)作为val 表中的原始值为9.83570191(该值正好有8位小数,但还有一些精度更高的值需要截断)。 当我使用Sql Management Studio从两个数据库中读取它时,舍入后,我看到这两个值都是9.83570191 然而,在Java中,我有一种奇怪的行为。 我使用JDBC和jtds-1.3.1来

我有两个数据库(SQL Server 2014和SQL Server 2016),它们具有相同的表和相同的数据。表有一个浮动字段。 我的sql查询如下 从myData中选择四舍五入(val,8)作为val

表中的原始值为9.83570191(该值正好有8位小数,但还有一些精度更高的值需要截断)。
当我使用Sql Management Studio从两个数据库中读取它时,舍入后,我看到这两个值都是9.83570191

然而,在Java中,我有一种奇怪的行为。 我使用JDBC和jtds-1.3.1来读取数据。 当我从SQL Server 2014中将其读为双精度或字符串时, 我看到的值是9.8357019100000001。 当我从SQL Server 2016中读取它时,它的值是9.83570191

如果我从sql中删除了Round函数,那么在从两个DBs读取数据时就会得到预期的值

您认为ROUND函数有问题吗,或者JTDS有什么有趣的地方吗


请注意,这是一个简化的示例,删除了任何不适合此问题的内容

浮点数很棘手,它不一定能精确地表示9.83570191这样的数字-如果您想要固定的小数位数,请使用decimal数据类型-也许可以将其转换为decimal?如果您想要数字的精确表示,请使用decimal数据类型,而不是float。谢谢您的建议。然而,我的问题是,为什么在读取SQL Server 2014和2016时会得到不同的结果?可能一个返回浮点,另一个返回十进制?您可能需要检查结果集元数据中的列类型