【发布时间】:2011-07-28 11:37:37
【问题描述】:
我知道在 mysql 中将十进制值存储为浮点数是个坏主意。
示例:如果我存储价格为 5.01 美元的产品,则该数字没有精确的浮点类型表示。
如果我这样做:
CREATE TABLE IF NOT EXISTS `test` (
`test` float NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `test` (`test`) VALUES
(5.01);
然后你运行查询
SELECT AVG( test )
FROM test
与该表相反,您将得到以下结果:
mysql> select avg(test) from test;
+------------------+
| avg(test) |
+------------------+
| 5.01000022888184 |
+------------------+
1 row in set (0.00 sec)
但是,如果您只选择这样的字段:
mysql> select * from test;
+------+
| test |
+------+
| 5.01 |
+------+
1 row in set (0.00 sec)
你最终得到了正确的金额。
我的问题是:怎么可能?
如果float类型不能准确代表我的值?
select 不应该也返回 5.01000022888184 吗?
【问题讨论】:
标签: mysql database floating-point decimal average