先看一段代码:
print 'hu=',hu
print 'hm=',hm
FC = float(hm[1])-float(hm[0])
FA = float(hm[2])-float(hm[0])
FD = float(hm[3])-float(hm[0])
GE = float(hm[6])-float(hm[4])
Real_Date=[FC,FA,FD,GE]
print 'FC =',FC,' FA =',FA,' FD=',FD,' GE=',GE
wt = 0
for x in xrange(len(Real_Date)):
if(float(Real_Date[x]) != float(dbFileDate[x])):
print Real_Date[x],' break ',float(dbFileDate[x])
wt = 2
break
return wt
Real_Date的数据与dbFileDate数据是从文件中取到的:
按理来说,以上代码从这两个文件中取得数据,再去对比,肯定没有什么问题。
但是,一运行就是有问题,程序对比245.0与245.0就判定为不相等了。
当时,搞的我蒙,怎么会这样,浮点型与浮点型可以啊:
结果是
后来,我又这样写,转成整数比较吧
for x in xrange(len(Real_Date)):
Db_X = int(float(Real_Date[x]) * 1000)
print 'Db_X',Db_X
Db_Y = int(float(dbFileDate[x]) * 1000)
print ' Db_Y ',Db_Y
if (Db_X != Db_Y):
print Real_Date[x],' break ',float(dbFileDate[x])
print Db_X,' int ',Db_Y
wt = 2
break
结果同样让你心碎
转成int后,精度丢失了,245.0变成了249.9999,打了这么多年仗,我第一次感觉到这么无奈,这样折腾2,3个小时,算了,先出去走走吧,走到了外面,突然,我想到一个问题,Python的代码是用utf-8,而我的系统是XP,XP的默认编码是gbk,会不会因为这样的原因呢?
程序指定了utf-8
我马上修改了一下程序,把从文件中读取的数据全部转成utf-8
wt = 0
for x in xrange(len(Real_Date)):
x11 =str(Real_Date[x]).decode('utf-8').encode('utf-8')
x12 = float(x11)
y11 = dbFileDate[x].decode('utf-8').encode('utf-8')
y12 = float(y11)
print x12," == ",y12
if(x12 != y12):
print x12,' break ',y12
wt = 2
break
一运行程序,完美解决:
归根到底,就是因为编码问题造成的
- 大小: 9.6 KB
- 大小: 42.8 KB
- 大小: 26.5 KB
- 大小: 8.5 KB
- 大小: 11.3 KB
- 大小: 31.4 KB
- 大小: 12.9 KB
- 大小: 25.2 KB
分享到:
相关推荐
但需要注意的是,结果包含的小数位数可能是不确定的: 0.2+0.1 # 0.30000000000000004 使用函数 str() 避免类型错误 当数字和字符在一起时要注意之间的转化: age = 1996 s = "我出生于" + str(age) + "年" print(s...
n为保留的小数位数,不加n则只保留x四舍五入后的整数部分。 >>> round(2.3) 2 >>> round(2.45, 1) 2.5 特殊情况 上面的结果并没有错误,这里再用2.675测试一下: >>> round(2.675, 2) 2.67 显然结果不符合四舍五...
本文实例讲述了Python中的浮点数原理与运算。...之所以会出现以上的结果,在于 Python (更准确地说是计算机硬件体系结构)对浮点数的表示,我们来看计算机(基于二进制)对十进制小数 0.1 的表示,十进制小数向二
1. 下面有关random的常用方法,描述错误的是? ( ) A. random.random()生成一个[0.0,1.0)之间的随机小数 B. random.randint(a,b)生成一个[a,b]之间的随机整数 C. random.choice(seq)从序列中随机选择一个...
把所有开销物品名称写进去,但是问题来了,如果你发现你记录错误了,想删除掉某件物品的名称,那你是不是要在这个长字符串中去查找到,然后删除,这样虽然可行,那是不是比较麻烦呢。 这种情况下,你是不是需要...
错误: 4.random.choice(元祖/列表/range()/字符串): 会从给定的元祖/列表/range()/字符串 中随机挑选出一个元素:(由于该操作不会对给定对象中的元素进行修改,所以对象类型可以是不可变类型,例如元祖和
printf("\n错误,Gauss列主元消去法无法忍受,在%d步退出!\n",k+1); printf("还要再计算其他的么(Y/N)?"); scanf("%c",&choice); if(choice=='Y' || choice=='y')/*判断用户输入*/ goto loop; else return; ...
toom22_deg2_broadwell()相较于gmpn_toom22_mul() ,k gmpn_toom22_mul()数的乘法速度更快,其中k为2的小数。 状态 工作正在进行中。 代码需要清理。 某些子例程可能无法按预期工作。 但是,如果发布了该过程的基准...
软件验证小数位数,小数点后,相反的字符,默认的空位,大多数的错误。 确认有效期后,您可以在holgura上查阅底稿和最新资料,并请参考相应的变量。 可以计算出成本,成本和收入之间的差异。 禁止再入境的禁酒令,...
如果参数太小,除了真实的一个圆圈之外,可能错误地检测到多个相邻的圆圈。如果太大,可能会遗漏一些圆圈。 circles参数表示检测到的圆的输出向量,向量内第一个元素是圆的横坐标,第二个是纵坐标,第三个是半径...
FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,...