当前位置: 代码迷 >> J2SE >> 关于Double型数据的有关问题
  详细解决方案

关于Double型数据的有关问题

热度:15   发布时间:2016-04-23 20:00:39.0
关于Double型数据的问题
各位大侠们,小弟碰到一个很头疼的问题,具体描述如下:
    我在Mysql数据库的数据表中有两个double型字段,分别为:余额balance,单价price。后台程序中Bean类中也有两个double型变量与之对应。但是我将数据从数据库取出后,在后台用输出时发现精度变了,比如在数据库中balance是1.3,但是后台输出时是1.299999826。这是为什么呀,该如何解决这个问题呢?

    如果我将double都改为float型,可以正确显示。但是在前台jsp页面中又会有问题,比如我balance=1.3,price=0.02,那么
balance/price理想值应该是65才对,但是在jsp中用el表达式${balance/price}得到值却是64.99999924
------解决思路----------------------
浮点数中有一部分数据本身就是近似存储的,有些浮点数,无法精确的用二进制表示,只能近似存储。
所以 使用double参与计算的时候,是会有误差的存在。
如果想精确存储和计算,推荐使用BigDecimal 类型。
------解决思路----------------------
引用:
浮点数中有一部分数据本身就是近似存储的,有些浮点数,无法精确的用二进制表示,只能近似存储。
所以 使用double参与计算的时候,是会有误差的存在。
如果想精确存储和计算,推荐使用BigDecimal 类型。

赞同! 1.3显示为1.299999826   的原因是浮点数值采用二进制系统表示,而二进制中无法精确的表示分数1/10。如果在数值计算中不含有任何舍入误差,就应该使用BigDecimal 类
------解决思路----------------------
一般金额这样的字段都用BigDecimal存储的吧,包括bo里面定义也是用java.math.BigDecimal
  相关解决方案