我在用pandas 处理数据的时候遇到个奇怪问题。
我原本试用Dataframe的两列做加法运算,然后与其另外一列作比较,再过滤不相等的数据,结果集集很奇怪,明明相等的计算结果,判断结果就是不相等。
后来我进行验证,发现个python加法运算的奇怪问题,例如:
print(17.432+0.909)
输出结果却是18.340999999999998,百思不得其解!求高人指点!
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
已结题
python加法运算小数处理问题,小数进位;
收起
- 写回答
- 好问题 0 提建议
- 关注问题
- 微信扫一扫点击复制链接分享
- 邀请回答
- 编辑 收藏 删除
- 收藏 举报
2条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
jxdq 2021-10-21 09:34关注原因解释:
浮点数(小数)在计算机中实际是以二进制存储的,并不精确。
比如0.1是十进制,转换为二进制后就是一个无限循环的数:
0.00011001100110011001100110011001100110011001100110011001100
python是以双精度(64bit)来保存浮点数的,后面多余的会被砍掉,所以在电脑上实际保存的已经小于0.1的值了,后面拿来参与运算就产生了误差。解决办法:
使用decimal库from decimal import *
误差会造成输出一个无限接近于19.8的数字
In [17]: 6.6*3
Out[17]: 19.799999999999997实际上应该是19.8
In [18]: Decimal('6.6')*3
Out[18]: Decimal('19.8')当精度提升的同时,也必然牺牲性能。有时候是值得的,比如在财务对数据精度要求比较高的情况下。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 2无用举报微信扫一扫点击复制链接分享编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容
编辑
预览
轻敲空格完成输入
- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
提交
- 2022-07-07 09:03回答 1 已采纳 使用input()函数输入得到的值是str类型的,字符串相加是进行拼接,入 ‘1’ + ‘1’ = ‘11’你得进行转换num1=int(input("输入加数1:"))num2=int(input(
- 2022-07-06 18:07回答 4 已采纳 你可以把具体的题目贴一下,然后看看到底是个什么情况,为什么不能用decimal,因为16位以后除了decimal也没有其他好的办法去控制精确度了
- 2021-11-11 05:36回答 3 已采纳 l=input().split('.') if int(l[0])>0: p=len(l[0])-1 print(l[0][0]+'.'+l[0][1:]+l[1]+'e'+st
- 2024-08-03 06:19李庆政370的博客 其实,不仅仅只有javascript,还有java、python等都会有类似问题,因为计算机中存的都是二进制(浮点数IEEE754是被普遍使用的标准),小数转二进制时是乘2取整,再用余下的小数部分乘2再取整,如此反复。有的小数转...
- 2022-04-09 01:37回答 2 已采纳 from sklearn import preprocessing import numpy as np X = np.array([[1.2, -1., 2.],
- 2022-09-29 13:25回答 1 已采纳 python里/运算符是按浮点数来计算的。如果你要计算整除,你需要用//运算符(两个斜杠)
- 2023-02-16 08:41回答 2 已采纳 该回答引用ChatGPT在计算机中,浮点数的表示采用二进制,但是在二进制中并不是所有的小数都可以被精确表示,这也是造成浮点数运算误差的原因之一。 在你的例子中,计算机内部的二进制浮点数值可能会和我们期
- 2020-11-27 13:40weixin_39639600的博客 运算和运算符运算:一个或者一个以上的数据经过变化得到一个新...成员检测运算 in ,not in1算术运算1.+ 加法运算符2.- 减法运算符3.* 乘法运算符4./ 除法运算符5.** 幂运算6.// 地板除运算符(取商运算符)7.% 取余...
- 2023-04-09 13:21回答 2 已采纳 输入的是浮点数啊,你怎么用int转换啊?a = float(input())
- 2023-03-03 07:26回答 4 已采纳 num = float(input("请输入一个浮点数: ")) integer_part, decimal_part = str(num).split('.') decimal_list = li
- 2022-04-19 08:12回答 2 已采纳 def min_num(*args): from itertools import permutations nums = [''.join(i) for i in permutati
- 2024-06-28 17:01划过手的泪滴t的博客 python数据类型与运算 一、Python中变量的数据类型 1、数据类型分类 2、数值类型 3、布尔类型 4、字符串类型 5、其他类型(了解) 二、Python数据类型转换 1、使用Python实现超市的收银系统 2、Python数据类型的转换...
- 2021-11-13 07:10Generalzy的博客 位运算,一个极容易被低端码农忽视的地带,因为它略微需要用一丢丢智商,真的只有那么一丢丢,但高手与low手的差距往往就是长这么一丢丢,能达到的深度就截然不同了。
- 2020-12-19 14:12weixin_39866867的博客 1 Python 基础语法所有语言都有它自己规定的格式,Python也不例外,下面从几个方面来了解。1.1 注释在Python中主要的使用的注释方式是#号,当然在某些情况下三对单引号也是可以的,比如在函数中可以作为函数的说明。...
- 2021-02-03 03:17寒阳碎雪的博客 首先,我们会详细介绍Python语言各种数值类型以及相应的算术运算和它们的优先级、结合性。然后,我们还会对整型的位运算做深入的解释。一、数值类型Python语言的数值类型有四种,分别是:整型、长整型、浮点型和复数...
- 没有解决我的问题, 去提问
问题事件
联系我们(工作时间:8:30-22:00)
400-660-0108kefu@csdn.net在线客服
- 京ICP备19004658号
- 经营性网站备案信息
- 公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司