浮点数都是有精度的。出现 26380.000000000094587这样的数字,整数后面跟一个非常小的小数,是正常的。所以浮点数的比较需要考虑精度。
处理数据精度出现严重问题,请问如何解决?
1,使用简单的变量复测试出现如下问题:
v=2638
o=9.8
c=9.9
typestr(v)//输出:INT
typestr(o)//输出:DOUBLE
typestr(c)//输出:DOUBLE
v\(c-o)==26380//输出:false
aa=v\(c-o)
print(aa)//输出:26380.000000000094587
//问题1:此处为什么不是整除,导致明明可以整除的结果却出现多余的小数,
//这在分析查询时使用条件‘==’‘<=’等逻辑时会漏掉应有的数据
typestr(aa)//输出:DOUBLE
float(v\(c-o))==26380//输出:true
bb=float(v\(c-o))
print(bb)//输出:26380
//问题2:对于能整除的数据不可能都用Float去截断数据吧?
v/(c-o)>26380//输出:true
cc=v/(c-o)
print(cc)//输出:26380.000000000094587
typestr(cc)//输出:DOUBLE
//问题3:对于‘/’‘\’两种除法文档的解释是‘/’会取整,此处除数为小数,可整除的情况下并未取整
浮点数都是有精度的。出现 26380.000000000094587这样的数字,整数后面跟一个非常小的小数,是正常的。所以浮点数的比较需要考虑精度。
建议您百度学习一下浮点数比较。浮点数比较需要考虑精度,是基本常识,不是bug。
https://www.jianshu.com/p/4679618fd28c
https://blog.csdn.net/qq_39131699/article/details/83449400
https://blog.csdn.net/slience_646898/article/details/80954464
这是用百度搜索“浮点数比较”排在前三位的文章,建议您学习一下。