0.1+0.2≠0.3,揭秘Python自带的Bug

朋友们,问一个简单的问题:0.1+0.2=?

你肯定会说:中国人不骗中国人,0.1+0.2=0.3。

但是在Python里,0.1+0.2≠0.3 ,我们今天一起来看看这个,并且看一下解决办法。

离奇的错误

在python里编写下列代码,这个代码的含义我就不解释了,我相信即使不懂编程你也能看懂。

编写完成后,运行这个代码,你得到的结果是多少?

a=0.1
b=0.2
c=a+b
print(c) # 在屏幕上,输出这个结果

我运行这个程序的输出结果,如下图所示,👇

为什么会出现这个结果呢?

这和浮点数在计算机里的表示方法有关,不只是Python有这个问题,其实其它编程语言也这样。
感兴趣的朋友可以点赞本文,点赞满20个,我就专门写一篇文章来解释这一现象的原因。

今天我们先来看一下,出现这种问题,应该如何解决。

有点复杂的解决方法。

这种小数点计算的误差,平时我们可能也察觉不出来,但是这种微小的误差,对于金融类对数字敏感的程序,影响就很大了。

比如我之前写了一个开源项目pofinance,可以通过一行代码计算量化交易中的做T盈亏,如下图所示,👇

# pip install pofinance
import pofinance

good = pofinance.t0(11.2, 11.4, 10000) # 针对10000股,11.2买入,11.4卖出,能赚多少钱?
print(good)

其中t0的函数作用,是进行股票买入卖出的价格计算,经常会涉及到分甚至毫厘的价格计算,必须保证结果100%正确。

我是如何保证结果100%正确的呢?

使用Python里自带的库:decimal和内置函数str,比如上面0.1+0.2的代码,如果想得到正确的结果,代码可以这么写。👇

from decimal import Decimal

a = Decimal(str(0.1)) # 先把0.1转成字符串,再把字符串转成数字
b = Decimal(str(0.2)) # 同上
c = a + b
print(c)

以上代码,运行后的结果,如下图所示,👇


这个解决方法是不是有点复杂,我也觉得太复杂了。

但你还有没有更好的办法呢?欢迎在评论区交流一下~👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/274349.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】自定义类型:结构体深入解析(三)结构体实现位段最终篇

文章目录 📝前言🌠什么是位段?🌉 位段的内存分配🌉VS怎么开辟位段空间呢?🌉位段的跨平台问题🌠 位段的应⽤🌠位段使⽤的注意事项🚩总结 📝前言 本…

内网离线搭建之----kafka-manager集群监控

工具介绍: 为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 Kafka Manager。 这个管理工具可以很容易地发现分布在集群中的哪些topic分布不均匀,或者是分区在整个集群分布不均匀的的情况…

mfc140u.dll丢失的解决方法,怎样修复mfc140u.dll

最近看到很多朋友在问找不到mfc140u.dll丢失怎么办?有什么解决方法,今天就给小伙伴们解答一下,mfc140u.dll丢失的解决办法,怎么修复mfc140u.dll。 一.丢失的原因 1.损坏的程序安装:在安装某个程序时,可能会出现意外中…

Python算法例30 统计前面比自己小的数

1. 问题描述 给定一个整数数组(数组大小为n,元素的取值范围为0~10000),对于数组中的每个元素,计算其前面元素中比它小的元素数量。 2. 问题示例 对于数组[1,2,7,8,5]&…

Oracle database 静默安装 oracle12c 一键安装 12.1.0.2

基于oracle安装包中应答文件实现一键安装 注意此安装脚本基于12.1.0.2 安装包 原始安装包结构为两个压缩包 此脚本使用安装包为原始压缩包解压后、 重新封装为一个.zip压缩包 建议在linux 环境下解压重新压缩后 使用该脚本 支持环境: Linux :centerOS 7 oracle :12.1.0.…

Android原生实现分段选择

六年前写的一个控件,一直没有时间总结,趁年底不怎么忙,整理一下之前写过的组件。供大家一起参考学习。废话不多说,先上图。 一、效果图 实现思路使用的是radioGroup加radiobutton组合方式。原理就是通过修改RadioButton 的backgr…

Langchain访问OpenAI ChatGPT API Account deactivated的另类方法,访问跳板机API

笔者曾经写过 ChatGPT OpenAI API请求限制 尝试解决 Account deactivated. Please contact us through our help center at help.openai.com if you need assistance. 结果如何? 没有啥用。目前发现一条曲线救国的方案。 1. 在官方 openai 库中使用 此处为最新Op…

【数据结构和算法】寻找数组的中心下标

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 前缀和的解题模板 2.1.1 最长递增子序列长度 2.1.2 寻找数组中第 k 大的元素 2.1.3 最长公共子序列…

模拟算法 蓝桥杯备赛系列 acwing

文章目录: 基础知识 什么是模拟? 例题 一、错误票据 1.解题思路 2.代码 二、移动距离 1.解题思路 2.代码 三、航班时间 1.解题思路 2.代码 四、外卖优先级 1.解题思路 2.代码 前面为了目录好看大家就当个玩笑看吧哈哈哈。下面上正文。 正文 基础知识 什…

Amazon CodeWhisperer 免费 AI 代码生成助手体验分享

今年上半年,亚马逊云科技正式推出了实时AI编程助手 Amazon CodeWhisperer,还提供了供所有开发人员免费使用的个人版版本。经过一段时间的体验,我觉得 CodeWhisperer 可以处理编程工作中遇到的很多问题,并且帮助开发人员提高编程效…

websocket 介绍

目录 1,前端如何实现即时通讯短轮询长轮询 2,websocket2.1,握手2.2,握手过程举例2.3,socket.io 3,websocket 对比 http 的优势 1,前端如何实现即时通讯 在 websocket 协议出现之前,…

Ubuntu20.04服务器使用教程(安装教程、常用命令、故障排查)持续更新中.....

安装教程(系统、驱动、CUDA、CUDNN、Pytorch、Timeshift、ToDesk) 制作U盘启动盘,并安装系统 在MSDN i tell you下载Ubuntu20.04 Desktop 版本,并使用Rufus制作UEFI启动盘,参考UEFI安装Ubuntu使用GPTUEFI模式安装&am…

hql、数据仓库、sql调优、hive sql、python

SQL/HQL HQL(Hibernate Query Language) 是面向对象的查询语言 SQL的操作对象是数据列、表等数据库数据 ; 而HQL操作的是类、实例、属性 #FROM String hql "from com.demo.bean.User" "select * from user" #WHERE "form User u where u.id 1…

Filter过滤器的使用!!!

什么是过滤器 当浏览器向服务器发送请求的时候,过滤器可以将请求拦截下来,完成一些特殊的功能,比如:编码设置、权限校验、日志记录等。 过滤器执行流程 过滤器的使用: /** Copyright (c) 2020, 2023, All rights …

【AIGC】AIGC——真正意义的智能,颠覆性的变革

AIGC——真正意义的智能,颠覆性的变革 AIGC(AI Generated Content,即人工智能生成的内容)可以通过以下几个方面来实现跨越: 技术跨越:AIGC可以通过不断的技术创新和进步,实现从简单的生成内容…

电脑键盘大小写切换按哪个键?正确操作分享!

“我在工作时,经常需要输入英文文档,但我不知道输入大小字母时应该按哪个键切换,有朋友可以教教我吗?” 在我们使用电脑时,输入英文文档是经常会遇到的事。当输入某些单词时,我们可能需要切换大小写。电脑键…

ASUS华硕ROG幻16 2023款GU603VU VV VI笔记本电脑原厂Win11.22H2系统

链接:https://pan.baidu.com/s/1AgevUZleCHBJgCBcIp5CFQ?pwdhjxy 提取码:hjxy 华硕笔记本2023款幻16原厂Windows11系统自带所有驱动、出厂主题壁纸、Office办公软件、MyASUS华硕电脑管家、Armoury Crate奥创控制中心等预装程序 文件格式&#xff1…

Centos开启防火墙和端口命令

Centos开启防火墙和端口命令 1 课堂小知识1.1 centos7简介1.2 iptables方式开启防火墙 2 操作步骤2.1 开启查看关闭firewalld服务状态2.2 查看端口是否开放2.3 新增开放端口2.4 查看开放的端口 3 防火墙的其他指令 1 课堂小知识 1.1 centos7简介 CentOS 7是CentOS项目发布的开…

.NET 使用Camunda快速入门

一.工作流介绍 1. 什么是工作流 工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。 工作流将一套大的业务逻辑分解成业务逻辑段, 并统一控制这些业务逻辑段的执行条件,执行顺序以及相互通…

48道Linux面试题

本博客将汇总 Linux 面试中常见的题目,并提供详细的解答。 文章目录 1、绝对路径用什么[符号表](https://so.csdn.net/so/search?q符号表&spm1001.2101.3001.7020)示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命…