Python 进阶(十一):高精度计算(decimal 模块)

news2024/11/29 0:31:00

在这里插入图片描述

《Python入门核心技术》专栏总目录・点这里

文章目录

    • 1. 导入decimal模块
    • 2. 设置精度
    • 3. 创建Decimal对象
    • 4. 基本运算
    • 5. 比较运算
    • 6. 其他常用函数
    • 7. 注意事项
    • 8. 总结


大家好,我是水滴~~
在进行数值计算时,浮点数的精度问题可能会导致结果的不准确性。为了解决这个问题,Python提供了decimal模块,它提供了一种精确计算浮点数的方法。本教程将详细介绍decimal模块的使用方法和常见函数,并提供示例代码帮助您理解和应用这一模块。

1. 导入decimal模块

在使用decimal模块之前,我们需要先导入它。可以使用以下代码将decimal模块导入到您的Python脚本中:

from decimal import Decimal

2. 设置精度

decimal模块中的Decimal类提供了一种精确表示浮点数的方式。在使用Decimal之前,我们可以设置所需的精度。可以使用getcontext()函数获取当前的上下文,并对其进行设置。下面是一个设置精度为10位小数的示例:

from decimal import Decimal, getcontext

getcontext().prec = 10

3. 创建Decimal对象

使用Decimal类,我们可以创建一个精确的浮点数对象。可以将整数、浮点数或字符串传递给Decimal类的构造函数来创建Decimal对象。下面是一些示例:

from decimal import Decimal

num1 = Decimal(10)  # 使用整数创建Decimal对象
num2 = Decimal('3.14')  # 使用字符串创建Decimal对象
num3 = Decimal(2.71828)  # 使用浮点数创建Decimal对象

4. 基本运算

decimal模块支持常见的数学运算,包括加法、减法、乘法和除法。下面是一些示例代码:

from decimal import Decimal

num1 = Decimal('10.5')
num2 = Decimal('2.3')

# 加法
result = num1 + num2
print(result)  # 输出:12.8

# 减法
result = num1 - num2
print(result)  # 输出:8.2

# 乘法
result = num1 * num2
print(result)  # 输出:24.15

# 除法
result = num1 / num2
print(result)  # 输出:4.5652173913

5. 比较运算

decimal模块还支持比较运算,可以比较两个Decimal对象的大小关系。下面是一些示例代码:

from decimal import Decimal

num1 = Decimal('10.5')
num2 = Decimal('2.3')

# 大于
result = num1 > num2
print(result)  # 输出:True

# 小于
result = num1 < num2
print(result)  # 输出:False

# 等于
result = num1 == num2
print(result)  # 输出:False

# 不等于
result = num1 != num2
print(result)  # 输出:True

6. 其他常用函数

decimal模块还提供了许多其他常用的函数,如取整函数、四舍五入函数、取绝对值函数等。下面是一些示例代码:

from decimal import Decimal

num = Decimal('-3.7')

# 取整
result = num.to_integral_value()
print(result)  # 输出:-4

# 四舍五入
result = num.quantize(Decimal('0.00'))
print(result)  # 输出:-3.70

# 取绝对值
result = abs(num)
print(result)  # 输出:3.7

7. 注意事项

在使用decimal模块时,需要注意以下几点:

  • 使用Decimal类创建的对象不能与普通的浮点数对象进行混合运算,需要保持一致使用Decimal对象。

  • 在进行除法运算时,需要注意除数是否为零,以避免ZeroDivisionError异常。

8. 总结

decimal模块提供了一种精确计算浮点数的方法,解决了浮点数精度问题。通过导入decimal模块、设置精度、创建Decimal对象、进行基本运算和比较运算,以及使用常用函数,我们可以实现精确的数值计算。在使用decimal模块时,需要注意保持一致使用Decimal对象,并避免除数为零的情况。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【研究中】sql server权限用户设置23.11.26

--更新时间2023.11.26 21&#xff1a;30 负责人&#xff1a;jerrysuse DBAliCMSIF EXISTS (select * from sysobjects where namehkcms_user)--判断是否存在此表DROP TABLE hkcms_user CREATE TABLE hkcms_user (id int primary key identity(1, 1),username char(32) NOT N…

【多线程】-- 03 龟兔赛跑案例线程创建方法之三:Callable接口

多线程 2 线程创建 【续】2.2 龟兔赛跑案例 首先需要一个赛道距离&#xff0c;然后会距离终点越来越近判断比赛是否结束打印出胜利者龟兔赛跑开始故事中是乌龟获胜&#xff0c;兔子需要睡觉&#xff0c;所以要模拟兔子睡觉最终&#xff0c;乌龟赢得比赛 package com.duo.de…

【Spring MVC】Filter 过滤器异常处理 HandlerExceptionResolver 分析

文章目录 前言版本说明测试 Demo1、自定义过滤器 DemoFilter2、自定义业务异常 ServiceException3、自定义异常处理类 DemoExceptionHandler4、DemoController5、请求测试 问题分析1、日志打印记录2、Debug 方法 解决方案1、修改自定义过滤器2、请求测试 解决方案分析1、日志打…

Linux uname命令教程:如何打印linux操作系统名称和硬件的基本信息(附实例教程和注意事项)

Linux uname命令介绍 uname命令是一个在Linux中常用的命令行工具&#xff0c;用于打印有关操作系统名称和系统硬件的基本信息。uname这个名字来源于"UNIX name"。它最常用于确定处理器架构&#xff0c;系统主机名和系统上运行的内核版本。 Linux uname命令适用的Li…

Ceph的监控工具Dashboard安装部署,详细实战过程

Ceph的监控工具Dashboard安装部署 还是用之前的集群&#xff0c;老规矩&#xff0c;没有主机名的是所有节点都执行 安装mgr-dashboard&#xff0c;每个节点都要安装 yum install -y ceph-mgr-dashboard开启MGR的功能 ceph mgr module enable dashboard查看开启的模块 [root…

《一个人的朝圣》读后感

最近一周看了一本《一个人的朝圣》&#xff0c;读后汇总些文字&#xff0c;便于后续查阅&#xff01; 65岁的哈罗德&#xff0c;始终过着轨迹类似的人生。在某一天&#xff0c;由于一封信&#xff0c;却使他的内心深处产生了某种信念。他迈开艰难的脚步&#xff0c;强忍住关节的…

U-boot(五):启动内核

本文主要探讨210的uboot启动内核过程。 嵌入式系统状态启动 未上电时bootloader、kernel、rootfs以镜像形式存储在启动介质中(X210为iNand/SD卡),运行时搬运到DDR中 未上电时u-boot.bin,zImage,rootfs在SD卡中各自对应的分区中,启动时去对应分区寻找(分区表一…

PWM(PulseWidthModulation)控制

PWM&#xff08;Pulse Width Modulation&#xff09;控制就是对脉冲的宽度进行调制的技术&#xff0c;即通过对一系列脉冲的宽度进行调制&#xff0c;来等效的获得所需要的波形&#xff08;含形状和幅值&#xff09;&#xff1b;面积等效原理是PWM技术的重要基础理论&#xff1…

HTTP协议发展

HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC) 每一代HTTP解决了什么问题&#xff1f; 下图说明了主要功能。 HTTP 1.0 于 1996 年最终确定并完整记录。对同一服务器的每个请求都需要单独的 TCP 连接。 HTTP 1.1 于 1997 年发布。TCP 连接可以保持打开状态…

漏电流直流互感器正负1-50ua

1/ 互感线圈 01 双绕组800t / 200t 互感线圈 02 单绕组 1120t

PTA-7-53 身份证排序

题目&#xff1a; 输入n&#xff0c;然后连续输入n个身份证号。 将每个身份证的年月日抽取出来&#xff0c;按年-月-日格式组装&#xff0c;然后对组装后的年-月-日升序输出。 根据题目要求&#xff0c;代码实现如下&#xff1a; import java.util.Scanner; import java.uti…

【源码解析】聊聊SpringBoot自动装配如何实现的

Springboot的习惯优于配置&#xff0c;其实就是默认装配一些配置&#xff0c;。对于整体的开发、部署提升了效率。我们直接写一个main类就可以快速开发了。 比如我们引入web的starter-web&#xff0c;那么就引入了web的框架。 <dependency><groupId>org.springfra…

设计模式之十二:复合模式

模式通常被一起使用&#xff0c;并被组合在同一个解决方案中。 复合模式在一个解决方案中结合两个或多个模式&#xff0c;以解决一般或重复发生的问题。 首先重新构建鸭子模拟器&#xff1a; package headfirst.designpatterns.combining.ducks;public interface Quackable …

关于微服务的思考

目录 什么是微服务 定义 特点 利弊 引入时机 需要哪些治理环节 从单体架构到微服务架构的演进 单体架构 集群和垂直化 SOA 微服务架构 如何实现微服务架构 服务拆分 主流微服务解决方案 基础设施 下一代微服务架构Service Mesh 什么是Service Mesh&#xff1f…

模拟电子技术Ⅲ-场效应管的分析

场效应管的定义 场效应管是单极性管&#xff1a;参与导电的是多数载流子&#xff0c;要么是自由电子&#xff0c;要么是空穴&#xff0c; 场效应管有三个极&#xff1a;源极&#xff08;s&#xff09;、栅极&#xff08;g&#xff09;、漏极&#xff08;d&#xff09;&#xf…

如何在gitlab上使用hooks

参考链接&#xff1a;gitlab git hooks 1. Git Hook 介绍 与许多其他版本控制系统一样&#xff0c;Git 有一种方法可以在发生某些重要操作时&#xff0c;触发自定义脚本&#xff0c;即 Git Hook&#xff08;Git 钩子&#xff09;。 当我们初始化一个项目之后&#xff0c;.git…

机器学习库:numpy

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 写在开头 基本数据格式 array 数据定位 argmax 数据生成 random.rand random.randn random.randint 维度拓展 expand_dim 结语 写在…

MutationObserver 监视 DOM 树改变的api

1、介绍 MutationObserver是一个构造函数&#xff0c;可以用来监听某个节点的变化&#xff0c;当节点发生变化时&#xff0c;可以执行一些回调函数。 它不会立即执行&#xff0c;需要调用MutationObserver的observe方法&#xff0c;传入你想要监听的节点&#xff0c;以及一些配…

Proteus仿真--基于ADC0832的可调频率波形输出

本文介绍基于ADC0832的可调频率波形输出&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 本设计中80C51单片机作为主控&#xff0c;用数码管作为显示模块&#xff0c;频率采集选用ADC0832芯片 仿真运行视频 Proteus仿真--基于ADC0832的可调频率波形输出…

专业级音乐制作软件Studio One 6.5详细功能介绍

Studio One 6.5是一款专业级音乐制作软件&#xff0c;由PreSonus公司开发。它提供了强大的音频录制、编辑、混音和制作工具&#xff0c;被广泛应用于音乐制作、录音棚和现场演出等领域。 Studio One-6.5 下载地址&#xff1a;https://souurl.cn/fMjY4Q 下面是关于Studio One 6…