嗨,我有一个简单的问题。我只是乘以两个数字:
143.778 * 17 = 2444.226
当我做对象时:
$row = $this->createRow();
$row->price = 143.778 * 17;
没关系,但是当我保存时,
$row->save();
数据库中的将存储 2444.226074 。这是mysql中浮点数的一些已知错误,或浮点数末尾会出现“074”?
答案 0 :(得分:2)
是的,这似乎是一个浮点错误,因为浮点数很可能是十进制数的近似值。将它们视为精确数字是一个常见的错误。随着在浮子上使用更多的算术运算(将结果重新计算为等式),浮点精度变得越来越明显。你永远不应该直接比较浮动值。
以下是MySQL的更多信息
http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
尝试使用他们建议的DECIMAL列。
DECIMAL和NUMERIC类型存储精确的数值数据值。在保持精确精度很重要时使用这些类型,例如使用货币数据。在MySQL中,NUMERIC实现为DECIMAL,因此以下关于DECIMAL的评论同样适用于NUMERIC。
从MySQL 5.0.3开始,DECIMAL值以二进制格式存储。以前,它们存储为字符串,每个数字使用一个字符,小数点(如果比例大于0),“ - ”符号(负数)。请参见第12.17节“精确数学”。
答案 1 :(得分:2)