首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于双精度和双十进制精度问题

关于双精度和双十进制精度问题
EN

Stack Overflow用户
提问于 2018-12-12 21:13:11
回答 1查看 533关注 0票数 1

在线上有一个奇怪的问题,但它不能离线复制。

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

以下是说明:

代码语言:javascript
复制
BigDecimal.valueOf (the value).multiply(BigDecimal.valueOf(100)).LongValue()

返回:

代码语言:javascript
复制
10739

在本地测试,结果总是:

代码语言:javascript
复制
10740

如何解决呢?

EN

回答 1

Stack Overflow用户

发布于 2018-12-12 21:54:06

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

现在有舍入问题,fp-strict和更多,但最好删除原因,并使用BigDecimal而不是double。请注意,new BigDecimal(107.4)不会这样做,只有new BigDecimal("107.4")或自己校正精度/小数位数。

代码语言:javascript
复制
double value = 107.4; // Might actually be more like 107.39999987.
BigDecimal x = new BigDecimal(value).setScale(1, BigDecimal.ROUND_HALF_UP);

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53743845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档