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

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

 

十分想念顺店杂可。。。

 

Excel显示的数据

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

Python代码读取

# -*- coding: utf-8 -*-
# @Time    : 2019/5/22 13:53
# @Author  : 甄超锋
# @Email   : [email protected]
# @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

 

你可能感兴趣的:(随笔)