2018-11-27 17:55:15 1909次浏览 1条回答 0 悬赏 10 金钱
order->price

price 的数据是 float(10, 2)

order::find()->where(['>=', 'price', 10])->count();

得到的结果和根据相应 sql 得到结果不同(我遇到这种情况,没具体研究)

数据类型改成 decimal(10, 2) 就好了

怪!怪!

最佳答案

  • 刘师傅 发布于 2018-11-28 09:57 举报

    请记住一句话:永远不要对浮点数做大小比较运算!
    所以,不管哪个PHP框架,甚至哪种编程语言,mysql也不例外,对浮点数的比较操作都有这种问题,这都是其计算机底层对浮点数的实现:IEEE754
    所以,一通百通,不要怪yii2框架,也不要怪php。这个标准有利有弊,自己见多了就识广了。

    1 条回复
    回复于 2018-12-04 10:28 回复

    感谢, 我自己一般是不用 float 的,处理遗留问题遇到的,后来发现是 float 比较的问题。遇到一处改一处吧

    觉得很赞
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
specialnot
总监

specialnot

注册时间:2015-08-06
最后登录:2019-08-16
在线时长:27小时54分
  • 粉丝43
  • 金钱1175
  • 威望200
  • 积分3445

热门问题