mysql 慎用 float字段类型

出现的问题

非常大的坑,因为分的数据量的值太小了,但有使用了float类型存储,结果sum的时候值对不上。
一开始不知道什么原因,后面看执行SQL,突然发现,怎么显示出来的位数很小,才发现是字段类型导致。

验证

mysql> set @d = 0.03137322132693297;
Query OK, 0 rows affected (0.00 sec)

mysql> select cast(@d as float),cast(@d as double);
+-------------------+---------------------+
| cast(@d as float) | cast(@d as double)  |
+-------------------+---------------------+
|         0.0313732 | 0.03137322132693297 |
+-------------------+---------------------+
1 row in set (0.00 sec)

mysql> mysql> select cast(@d as float),cast(@d as double),cast(@d as decimal(20,10));
+-------------------+---------------------+----------------------------+
| cast(@d as float) | cast(@d as double)  | cast(@d as decimal(20,10)) |
+-------------------+---------------------+----------------------------+
|         0.0313732 | 0.03137322132693297 |               0.0313732213 |
+-------------------+---------------------+----------------------------+
1 row in set (0.00 sec)

mysql> select cast(@d as float),cast(@d as double),cast(@d as decimal(200,50));
ERROR 1426 (42000): Too-big precision 200 specified for '@d'. Maximum is 65.

mysql> select cast(@d as float),cast(@d as double),cast(@d as decimal(60,50));
ERROR 1425 (42000): Too big scale 50 specified for column '@d'. Maximum is 30.

mysql> select cast(@d as float),cast(@d as double),cast(@d as decimal(30,20));
+-------------------+---------------------+----------------------------+
| cast(@d as float) | cast(@d as double)  | cast(@d as decimal(30,20)) |
+-------------------+---------------------+----------------------------+
|         0.0313732 | 0.03137322132693297 |     0.03137322132693297000 |
+-------------------+---------------------+----------------------------+
1 row in set (0.00 sec)

mysql> 

慎用float

float是32位,存进去会自动截断。double是64位,可以存2倍的精度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值