mysql double 精度_Double类型精度问题引起的错误

场景说明

研发同事让把某个double类型字段的值四舍五入保留2位小数,mysql中round(col,2)可以实现四舍五入并且保留2位小数,但是神奇的事情发生了:发现有的四舍五入是正确的,而有的不是我们想要的结果,如下:简单模拟此场景:

yujx>drop table dd;yujx>create table dd (a double);yujx>insert into dd values(956.745),(231.34243252),(321.43534),(5464.446);yujx>select a,round(a,2) from dd;+--------------+------------+

| a| round(a,2) |

+--------------+------------+

|956.745 |956.74|#可以看到并不是我们期望的956.75| 231.34243252 |231.34 |

|321.43534 |321.44 |

|5464.446 |5464.45 |

+--------------+------------+

4 rows in set (0.00 sec)

如上,有的是正确的,有的不是我们期望的值,那么问题来了,为什么呢?

通过询问和网上搜索后,发现可能是因为double的精度问题导致的

查阅MySQL官当关于double、Float、DECIMAL, NUMERIC类型的介绍,如下:

FLOAT, DOUBLE

#为了说明问题,摘了官当的部分内容,关于更详细的介绍请

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值