gpt4 book ai didi

java - Java 和 SQL Server 中的精度噩梦

转载 作者:搜寻专家 更新时间:2023-11-01 01:01:21 24 4
gpt4 key购买 nike

我一直在为 Java 和 SQL Server 中的精度梦魇而苦苦挣扎,直到我再也不知道了。就我个人而言,我理解这个问题及其根本原因,但向地球另一端的客户解释这一点是不可行的(至少对我而言)。

情况是这样的。我在 SQL Server 中有两列 - Qty INT 和 Price FLOAT。这些值是 - 1250 和 10.8601 - 所以为了获得总值(value),它的数量 * 价格和结果是 13575.124999999998(在 Java 和 SQL Server 中)。这是正确的。问题是这样的——客户不想看到那个,他们只看到那个数字 13575.125,仅此而已。在一个地方,他们以 2 位小数的精度查看它,而在另一个地方以 4 位小数的精度查看它。当以 4 位小数显示时,数字是正确的 - 13575.125,但当以 2 位小数显示时,他们认为这是错误的 - 13575.12 - 应该是 13575.13!

帮助。

最佳答案

您的问题是您使用的是 float 。在 Java 端,您需要使用 BigDecimal,而不是 float 或 double,而在 SQL 端,您需要使用 Decimal(19,4)(或者 Decimal(19,3),如果它有助于跳转到您的精度级别)。不要使用 Money 类型,因为 SQL 中 Money 类型的数学会导致截断,而不是舍入。数据存储为 float 类型(你说它是不可更改的)这一事实并不影响这一点,你只需要在对它进行数学运算之前第一时间转换它。

在你给出的具体例子中,你需要先得到4位小数精度的数字,视情况放入BigDecimal或Decimal(19,4)中,然后进一步四舍五入到2位小数精度。然后(如果你正在四舍五入)你会得到你想要的结果。

关于java - Java 和 SQL Server 中的精度噩梦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1750139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com