如何在mysql中正确使用float类型?

7ajki6be  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(382)

我在mysql中有一个表,其字段类型为float(10,7)。我尝试插入值1196.104,即使使用phpmyadmin它也会将该值转换为1000.0000000。我应该使用什么类型在数据库中正确存储值1196.104。

q43xntqr

q43xntqr1#

这完全符合 FLOAT(10,7) . 如果给定的值与位数不匹配,则会对该值设置上限,并使用可以匹配的最大值。
在本例中,10位数的值为999.9999999,四舍五入为1000.0000000。
https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html 说:
mysql允许非标准语法:float(m,d)或real(m,d)或double precision(m,d)。这里,(m,d)表示可存储的数值最多为m位,其中d位可能在小数点之后。
换言之,您给了它最大输出为1000.0000000的约束,因为您告诉它最大输出为10位,其中7位在小数点的右边。

mysql> create table f ( f float(10,7));

mysql> insert into f values (1196.104);
Query OK, 1 row affected, 1 warning (0.02 sec)

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level   | Code | Message                                    |
+---------+------+--------------------------------------------+
| Warning | 1264 | Out of range value for column 'f' at row 1 |
+---------+------+--------------------------------------------+

mysql> select * from f;
+--------------+
| f            |
+--------------+
| 1000.0000000 |
+--------------+

如果要存储较大的值,请声明 FLOAT 有足够的数字来保存您使用的值。例如,可以将值1196.104插入到 FLOAT(11,7) 或者 FLOAT(10,6) .
或者你可以用 FLOAT 没有参数,并且它将完全不限制位数。
关于浮动有一些警告。它是一个不精确的数字类型,并且会有舍入错误。这是不可避免的,因为float的实现方式,它影响到每一种编程语言。
阅读https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html 以及https://docs.oracle.com/cd/e19957-01/806-3568/ncg_goldberg.html
也可以看看我以前的微博:https://twitter.com/billkarwin/status/347561901460447232

相关问题