首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从mysql返回给java的双精度值不正确

从mysql返回给java的双精度值不正确
EN

Stack Overflow用户
提问于 2020-09-11 13:48:36
回答 2查看 486关注 0票数 0

所以我试着从mysql到java中读取一些双精度值。我使用mybatis映射器读取我的值,并将值作为映射返回。

当我在sql中运行查询时,我的值是-42295.8451869851,但是当我使用mybatis从查询中选取相同的值并将其放入java Hashmap中时,值变为{Double@25327}-42295.84518699004。为什么会出现这种异常,我可以做些什么来防止它?

这是我正在使用的mybatis查询行:我正在使用类org.apache.ibatis.session.SqlSession

代码语言:javascript
运行
复制
List<Map<String, Object>> myListMaps =  getSqlSession().selectList(QUERY_NAME, queryParameters);

编辑:在看了一些回复后,我意识到我需要如何使用bigDecimal而不是Double/Float。因此,我将重新定义我的问题,以解决我在这里的目的。有没有办法告诉mybatis某个sql类型要映射到BigDecimal,而不是HashMap中的Double/Float?

我还从sql中提取了其他值,如integervarchar,它们会自动转换为java中所需的integerstring类型,我希望按原样提取它们。只需将双精度数改为bigdecimal即可。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-11 14:04:21

此行为适用于浮点数。您可以阅读IEEE754的工作原理https://en.wikipedia.org/wiki/IEEE_754

但我认为还有另一个问题正在发生。您说数字是双精度(64位),但根据结果,它看起来是转换为浮点数(32位)

代码语言:javascript
运行
复制
-42295.8451869851 -> 0xC0E4A6FB0BC59380 (64bit) - 0xC72537D8 (32bit)

-42295.84518699004 -> 0xC0E4A6FB0BC59627 (64bit)- 0xC72537D8 (32bit)

如果您希望保持精度正确,那么您需要在DB中正确地定义它,然后在Java语言中使用https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html

票数 2
EN

Stack Overflow用户

发布于 2020-09-11 14:04:33

如果需要precision doc,请使用BigDecimal。

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

https://stackoverflow.com/questions/63841429

复制
相关文章

相似问题

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