请看这个问题
SELECT max( val_amd ) FROM `best_deposits`
表中的最大值等于14.6(字段的类型为
float
),但它返回
14.3599996566772
为什么会这样,我如何才能得到确切的价值?
多谢
最佳答案
花车是邪恶的!
千万不要用浮点数来存储数量或价格。相反,使用int并以美分为单位存储金额。这是永远解决这些问题的唯一方法。
为什么会这样:因为floats在很多情况下(例如在您的情况下为0.6)不能被完全保存
PS:到目前为止,我们对不同的语言有过无数次这样的问题:
Use Float or Decimal for Accounting Application Dollar Amount?
PHP rounding problem (5.2.3)?
Rounding problem with double type
Javascript rounding v c# rounding
Python rounding problem
... and a lot more
编辑:对你的评论:如我所说:
使用int并将金额存储在
美分
(或者您可以使用十进制(10,2)(或者您需要多大/多大的十进制位)。。。不知道这是怎么回事)