Home >Backend Development >PHP Tutorial >mysql的float类型很奇怪的,2个值不相等

mysql的float类型很奇怪的,2个值不相等

WBOY
WBOYOriginal
2016-06-23 13:33:001191browse

表有很多数据,可有几条很奇怪,字段是float类型,2个值相同

Payment 值=299.7
feiyong 值=299.7

查询语句:feiyong>0 and Payment>0 and Payment
这时还是能查询出来,而且只是有几条有这问题,其他的都正常


回复讨论(解决方案)

浮点数为表示很大的数,丢失了部分精度
所以在比较时应用: 两个数的差的绝对值小于某个极小数时就视为相等 的策略
或者用 round 取得有效数后在比较
如果你的应用需要有精确的小数位数(比如金融)那么应该使用 DECIMAL 类型

这个还是蛮正常的  毕竟float数据没有办法保证数据的精度呢

浮点数为表示很大的数,丢失了部分精度
所以在比较时应用: 两个数的差的绝对值小于某个极小数时就视为相等 的策略
或者用 round 取得有效数后在比较
如果你的应用需要有精确的小数位数(比如金融)那么应该使用 DECIMAL 类型



那现在查询语句要怎么改才能正常查询,谢谢

建议修改类型为DECIMAL

select ..., abs(Payment-feiyong) as aform ......where feiyong>0 and Payment>0having a > 1e-5

select ..., (Payment-feiyong) as aform ......where feiyong>0 and Payment>0having a > 1e-5

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn