我在这里遇到了一些非常意外的行为 - mysql 似乎以一种我无法解释的方式做错了数学。太长了;我正在子查询中选择一个 double(7, 4)
字段的总和,将其插入到具有相同数据类型的另一个表的列中,但插入步骤由于某种原因弄乱了我的数学。这是我所拥有的:
mysql> create temporary table table_1 (amount double(7, 4) not null);
mysql> create temporary table table_2 (amount double(7, 4) not null);
mysql> insert into table_1 (amount) values (-500.00);
mysql> insert into table_1 (amount) values (-500.00);
mysql> insert into table_1 (amount) values (-500.00);
mysql> select sum(amount) from table_1;
+---------------+
| sum(amount) |
+---------------+
| -1500.00|
+---------------+
mysql> insert into table_2 select sum(amount) from table_1;
mysql> select * from table_2;
+-----------------+
| amount |
+-----------------+
| -999.9999 |
+-----------------+
这里到底发生了什么?我使用的是版本 5.5.46-0+deb8u1。
编辑:将 table_2.amount 更改为浮点列可以解决问题(最后一个查询得到 -1500)
最佳答案
刚刚发现答案here 。 decimal(7, 4)
声明截断给定值包括小数点后的数字。 -999.9999
只是该列可以存储的最大值。
关于mysql - INSERT...SELECT 负 double 值损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458486/