`
longhua2003
  • 浏览: 13833 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

经典错误, Python小数比较

阅读更多
先看一段代码:
            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
分享到:
评论
2 楼 longhua2003 2014-10-23  
hwwh1999 写道
居然跟我一样搞Genesis的... 也用python!

你在那家公司工作啊
1 楼 hwwh1999 2014-10-21  
居然跟我一样搞Genesis的... 也用python!

相关推荐

    python二级考试

    询问关于Python分支结构的描述中哪个选项是错误的。 **答案解析**: - **选项A**: 分支结构使用`if`保留字 —— 正确。 - **选项B**: `if-else`语句用于形成二分支结构 —— 正确。 - **选项C**: `if-elif-else`...

    高中信息技术《Python语言》模块试卷.doc

    23. random.randint(100,1000)产生的随机整数中,最小数为100,最大数为1000。 24. len(python)的值无法确定,因为这里没有具体的python变量或字符串。 25. random.random()值的范围是[0.0, 1.0)。 以上知识点涵盖...

    Python3.7.2中文文档-教程-Python的非正式简介

    标题《Python3.7.2中文文档-教程-Python的非正式简介》与描述《Python3.7.2中文文档根据官方Python3.7.2英文文档机器翻译》表明这份文档是一份关于Python编程语言的入门级教程,特别使用了版本3.7.2的官方文档内容,...

    解决Python的str强转int时遇到的问题

    特别需要注意的是,如果字符串表示的是一个小数,那么使用`int()`函数转换会引发错误。例如: ```python print(int("3.0")) # 会引发ValueError错误 ``` 错误提示信息为:"invalid literal for int() with base 10...

    python二级考试试题2.doc

    选项 B 中的 "Python 语言要求所有浮点数必须带有小数部分" 是错误的,Python 语言不要求所有浮点数必须带有小数部分。选项 C 中的 "Python 语言中,复数类型中实数部分和虚数部分的数值都是浮点类型,复数的虚数...

    python bug清除手册-代码书写规范与基本使用.pdf

    ### Python Bug清除手册知识点详解 #### 一、代码书写规范 **1.1 等号两侧空格的...通过以上总结,我们可以看到,遵循良好的编程实践、注意代码的规范性和了解常见的错误类型对于编写高质量的Python代码至关重要。

    python-leetcode面试题解之第166题分数到小数-题解.zip

    在本压缩包中,我们关注的是一个Python编程与算法相关的面试题目,具体是LeetCode的第166题,题目要求将分数转换为小数。LeetCode是一个热门的在线编程平台,它提供了一系列的编程挑战,帮助开发者提升技能,尤其在...

    【编程】python经典实例练习.pdf

    【编程】Python经典实例练习包含了Python编程的基础知识和常见题型,主要涵盖了数据类型、运算符、控制结构、函数以及一些编程概念。以下是这些题目所涉及的知识点详解: 1. Python 支持的数据类型:Python 不包含 ...

    python语言程序设计(刘卫国)实验指导_部分答案.doc

    第2题的比较有误,浮点数比较应该使用足够精度,可以使用round()函数处理后再比较。第3题的程序要求判断输入的整数能否被3或7整除,完整代码如下: ```python m = int(input()) if m % 3 == 0 or m % 7 == 0: ...

    python实现BMI计算

    为了展示Python的列表(List)使用,我们可以创建一个列表来存储这些类别,并通过比较BMI值来确定用户属于哪一类: ```python bmi_categories = [ "体重过轻", "正常范围", "体重过重", "肥胖" ] category_index...

    python实现算术编码

    在Python实现中,可以通过并行处理或者优化数据结构来提高编码和解码效率,同时考虑错误检测和纠正机制,以确保数据的完整性和可靠性。 通过理解和实现这个Python项目,你可以深入理解算术编码的工作原理,并能将其...

    python学习文档tutorial.pdf

    错误和异常处理是通过`try/except`块实现的,确保程序在遇到问题时能优雅地处理。 Python有丰富的标准库,涵盖了网络、操作系统接口、文本处理等多个领域。虚拟环境和包管理工具如`venv`或`virtualenv`帮助隔离项目...

    jisuanqi.zip_小数计算器_小数运算_计算器 小数_计算器+小数_计算器小数

    为解决这个问题,开发者可能需要使用特殊的数据类型,如Java的`BigDecimal`或Python的`decimal`模块,以保持更高的计算精度。 2. **异常处理**:在除法运算中,如果除数为零,会引发除零错误。计算器程序需要有适当...

    python从入门到实践第二章思维导图

    在Python 2中,`/`表示整数除法,结果会舍去小数部分;而在Python 3中,`/`总是表示浮点除法,结果是小数。如果要进行整数除法并获得整数结果,应使用`//`运算符。浮点数的精度问题在大多数情况下不是主要考虑因素,...

    python笔记

    - 当你在缩进层级上发生错误时,例如当你尝试退出一个代码块时使用的缩进与该代码块的实际缩进不匹配,则会引发此异常。 - 这种情况常常发生在你试图结束一个函数或循环,但缩进没有正确地回到上级代码块的缩进...

    计算机二级Python真题及答案解析1图文练习.doc

    - 错误的说法是B.python支持Windows但不支持Linux系统,Python是跨平台的。 12. **min函数应用于列表** - 对于列表list1=[88,22,34,89,67],min(list1)返回最小值。 - 正确答案:A.22 13. **保留三位小数** ...

    python2与python3区别

    Python 2中,可以将字符串与整数相乘,但在Python 3中,这个操作会导致错误,除非使用`*`操作符来重复字符串。Python 3还引入了`pow()`函数,用于执行乘方运算,支持负指数和复数。 在导入模块方面,Python 3允许...

    Python期末试题题库完整(20210108145706).pdf

    3. **字符串比较**:Python中的字符串比较是基于字典顺序的,不是基于长度。所以,选项A、B和D都是错误的,C是正确的。 4. **科学计数法**:`9.6E-5`代表0.000096,因此选项C是正确的。 5. **文件操作模式**:以...

Global site tag (gtag.js) - Google Analytics