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