SQL MIN()奇怪的值

Edy*_*ood 8 mysql sql database floating-point

我正在一家小型网店工作,我正试图获得产品的最低价格(照片).

所以我查看最低的加价是多少(照片可以订购不同尺寸):

SELECT 
  MIN(price) as price 
FROM 
  rm_prices 
WHERE 
  photo_id = '47' AND 
  price != '0'
Run Code Online (Sandbox Code Playgroud)

这将返回为此产品找到的最低值.

当我检查我的数据库时,我发现最低值是1256.3.
当我打印我的结果时,给出的数字是1256.30004882813.
该值设置为FLOAT.

为什么结果是1256.30004882813而不是1256.3?

Dan*_*llo 13

因为实数 1256.3不能精确表示浮点数.

您应该使用定点数据类型来存储货币数据.引用MySQL文档:

DECIMALNUMERIC类型的存储精确的数值数据.在保持精确精度很重要时使用这些类型,例如使用货币数据.


zed*_*xff 6

这是FLOAT列类型的副作用,您可以尝试将价格存储在DECIMAL数据类型中,有关它的更多信息,请参阅mysql手册:http://dev.mysql.com/doc/refman/5.1/en/定点-types.html