【Python 基础教程】彻底解决python round函数的四舍五入不精确的问题

简介: 【Python 基础教程】彻底解决python round函数的四舍五入不精确的问题

前言🥦


在Python官方有这样一句话:The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations for more information也就是说,在Python语言中小数的存储往往是近似值,并不像整数那样精确。我们呢有时候需求就是对小数的指定位数进行四舍五入,今天博主在这里分享一下在Python中进行小数四舍五入的几种方法。如果你也有什么好的方法欢迎评论区留言哦。


一、小数不精确的常见问题🥦


Python中的小数存储往往是不精确的,相加的时候可能会导致精度丢失,或者结果出乎意料。


1.相加🌴


print(1.01+1.02)


7496a14b2b8b471cb104f550eb3f69e7.png


2.四舍五入🌴


以下代码的打印结果

print(round(1.135,2))

print(round(1.235,2))

print(round(1.335,2))

print(round(1.435,2))

print(round(1.535,2))

print(round(1.635,2))

最后的一位数应该都为4,但是由于精度丢失,导致有些数四舍五入失败。


18af565ecec94e258cca5269778eaec9.png


二、round函数🥦


1.简介🌴


官方给出的接口如下:

def round(number: SupportsRound[_T], ndigits: SupportsIndex)


第一个参数指的是需要进行四舍五入的小数,第二个参数是保留的小数位

默认是保留0位小数,也就是保留到整数。


2.使用方法🌴


① 代码🌵:


print(round(1.135,2))
print(round(1.235,2))
print(round(1.335,2))
print(round(1.435,2))
print(round(1.535,2))
print(round(1.635,2))


② 运行结果🌵:


18af565ecec94e258cca5269778eaec9.png


③ 暴露问题🌵:


可以看出来运行结果不是很理想,因为有些数值四舍五入进位失败,我们可以处理一下,然后就可以得到准确的结果了。经过分析当只有一位小数的时候保留到整数,进位比较准确。

代码:

a3c86971e194428ab0c1ec38e6fe271e.png


结果:

0f9727fe496a415d92e27b4a18c67b28.png


④ 解决方法🌵:


我们可以对代码做出这样的改动,也就是利用四舍五入一位小数可以获得精确值的性质

可以先将数值扩大n倍,直到将保留小数位的下一位小数提到小数部分第一位,也就是说保留两位小数就将第三位小数提到第一位,做的操作就是乘以100。依次类推

print(round(1.235,2))
print(round(1.3355*100)/100)
print(round(1.435,2))
print(round(1.5355*100)/100)
print(round(1.635,2))


b822bbc7b6744551b017bfe8963b79c1.png


三、Decimal模块🥦


这是一个精确小数计算的模块,咱们只在这里说一下他的简单使用方法。


1.创建Decimal小数🌴


① 字符串型🌵


代码:


print("Decimal精确的1.35:",Decimal("1.35"))
• 1


运行结果:


4a22a5586f684bfb871d406a4a257b8d.png


② 数值型🌵


代码:


print("float型的1.35",Decimal(1.35))
• 1


运行结果:


a32918aa69e94f7f93b0a237dfc5e756.png


2.结合round函数精确四舍五入🌴


代码:


from decimal import Decimal
print(round(Decimal("1.535"),2))
print(round(Decimal("1.335"),2))


运行结果:



a2b6164a5a244b53b8a506602e2ddcd0.png

3.使用自身方法精确四舍五入🌴


代码:


print(Decimal("1.3355").quantize(Decimal("0.000")))
print(Decimal("1.2955").quantize(Decimal("0.00")))
print(Decimal("1.3355").quantize(Decimal("0.00")))


运行结果:


1524613c331b4f7ebb8af55b0b2572de.png





相关文章
|
1月前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
2天前
|
机器学习/深度学习 数据采集 数据可视化
Python/Anaconda双方案加持!Jupyter Notebook全平台下载教程来袭
Jupyter Notebook 是一款交互式编程与数据科学分析工具,支持40多种编程语言,广泛应用于机器学习、数据清洗和学术研究。其核心优势包括实时执行代码片段、支持Markdown文档与LaTeX公式混排,并可导出HTML/PDF/幻灯片等格式。本文详细介绍了Jupyter Notebook的软件定位、特性、安装方案(Anaconda集成环境与原生Python+PIP安装)、首次运行配置及常见问题解决方案,帮助用户快速上手并高效使用该工具。
|
7天前
|
SQL 关系型数据库 MySQL
milvus-use教程 python
本项目参考vanna项目,获取数据库元数据和问题SQL对,存入Milvus向量数据库,并进行相似性检索。采用m3e-large嵌入模型,通过DatabaseManager类实现数据库连接持久化,MilvusVectorStore类封装了Milvus操作方法,如创建集合、添加数据和查询。项目提供init_collections、delete_collections等文件用于初始化、删除和管理集合。所用Milvus版本较新,API与vanna项目不兼容。 [项目地址](https://gitee.com/alpbeta/milvus-use)
82 9
|
24天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
14天前
|
大数据 开发者 C++
Python语法糖详解教程
《Python语法糖详解教程》介绍了编程语言中的“语法糖”,即通过特殊语法形式简化代码,使代码更简洁、易读和高效。文章详细解析了列表推导式、字典推导式、元组解包、条件表达式、with语句和装饰器等核心语法糖,并提供了具体示例和最佳实践指南。通过这些技巧,开发者可以在保持底层功能不变的前提下,显著提升开发效率和代码质量。
36 8
|
2月前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
405 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
16天前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
16天前
|
Go Python
Python中的round函数详解及使用示例
`round()`函数是Python内置的用于四舍五入数字的工具。它接受一个数字(必需)和可选的小数位数参数,返回最接近的整数或指定精度的浮点数。本文详细介绍其用法、参数及示例,涵盖基本操作、负数处理、特殊情况及应用建议,帮助你更好地理解和运用该函数。
|
17天前
|
人工智能 数据库连接 开发工具
[oeasy]python069_当前作用域都有些什么_列表dir_函数_builtins
本文介绍了Python中`dir()`函数的使用方法及其作用。`dir()`可以列出当前作用域内的所有变量和成员,类似于`locals()`,但`dir()`不仅限于本地变量,还能显示模块中的所有成员。通过`dir(__builtins__)`可以查看内建模块中的所有内建函数,如`print`、`ord`、`chr`等。此外,还回顾了`try-except-finally`结构在数据库连接中的应用,并解释了为何`print`函数可以直接使用而无需导入,因为它位于`__builtins__`模块中。最后,简要提及了删除`__builtins__.print`的方法及其影响。
33 0
|
9天前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。

热门文章

最新文章