gpt4 book ai didi

java - 关于double和bigdecimal的精度问题

转载 作者:行者123 更新时间:2023-11-29 04:13:26 25 4
gpt4 key购买 nike

线上出现了一个奇怪的问题,但是离线无法重现。

具体问题如下:数据库中存储的值为107.4,类型为decimal,mybatis取值,mybatis配置的java类型为double

以下说明:

BigDecimal.valueOf (the value).multiply(BigDecimal.valueOf(100)).LongValue()

返回:

10739

本地测试,结果总是:

10740

如何解决?

最佳答案

如果该值被取为 double,则计算机中 107.4 的值将已经存在近似误差,因为浮点值是 2 的(负)幂的有限和。

现在存在舍入问题、fp-strict 等等,但最好消除原因,并使用 BigDecimal 而不是 double。请注意,new BigDecimal(107.4) 不会执行,只能执行 new BigDecimal("107.4") 或自行更正精度/比例。

double value = 107.4; // Might actually be more like 107.39999987.
BigDecimal x = new BigDecimal(value).setScale(1, BigDecimal.ROUND_HALF_UP);

其中比例尺 1 对应于数据库列定义。

关于java - 关于double和bigdecimal的精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743845/

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