Python xlrd 读取Excel数字 数字丢失精度小数位太长 求大神的解决方法(已解决)

    xiaoxiao2022-07-04  123

    Python xlrd 读取Excel数字 跟Excel显示不一样 小数位太长 求大神的解决方法(已解决)

     

    十分想念顺店杂可。。。

     

    Excel显示的数据

     

    Python代码读取

    # -*- coding: utf-8 -*- # @Time : 2019/5/22 13:53 # @Author : 甄超锋 # @Email : 4535@sohu.com # @File : aaa.py # @Software: PyCharm import xlrd # xled读取 workbook = xlrd.open_workbook("aaa.xlsx") sheet2 = workbook.sheet_by_index(4) rows1 = sheet2.row_values(22) print(rows1[2]) import openpyxl # openpyxl读取 wb = openpyxl.load_workbook('aaa.xlsx',) a_sheet = wb.get_sheet_by_name('表五') b4_too = a_sheet.cell(row=23, column=3) print(b4_too.value) # print(int(b4_too.value)) # print(float(b4_too.value)) # pandas读取 import pandas as pd io = "aaa.xlsx" data = pd.read_excel(io, sheet_name = "表五",) # a = data.head() print(data.values)

    结果为 24.785999999999998, 跟Excel显示的完全不一样百度我也搜不到结果,先发到这个上吧,啥时候解决了 ,我再补充解决方案,也请各位大佬给我指点指点,拜谢。

    我现在的方法是 四舍五入 因为位数多 可以四舍五入的位数长点, 因为我的Excel里基本都是2位小数,所以我四舍五入到7位小数, 然后就是个准确的小数,再把小数转成字符串就是需要的小数了.

    出现这种问题的原因是

    浮点数的存储误差 计算机能精确存储0.1吗?答案是,不能。 你会问,为啥不能?又不是有无限位,为啥不能?呃,计算机是用二进制来存储你心里想着的十进制小数。0.1是十进制小数,转换成二进制小数后,二进制小数是无限位的。 计算机能精确存储0.01吗?答案是,不能。只能存储0.01的近似值。 计算机能精确存储0.3吗?答案是,不能。只能存储0.3的近似值。 这就能够解释为什么输出内容中的第3行输出的积不是0.01,而是0.010000000000000002。后者正是前者的近似值。也能解释为什么输出内容中的第5行输出的和不是0.3,而是0.30000000000000004。 对多数实数,计算机都无法精确存储。这造成误差。在用计算机解决实际问题时,要考虑上述误差的积累。

     

    pythonQQ交流群:785239887

     

    最新回复(0)