六、【Python】基础教程-【Python全掌握】六大基础数据类型:浮点类型的终极指南

🌟📚【Python全掌握】六大基础数据类型:浮点、布尔、列表、元组、字典、集合的终极指南📚🌟 


 博主往期文章分享:

【机器学习】专栏 icon-default.png?t=N7T8http://t.csdnimg.cn/sQBvw

【Python学习】专栏icon-default.png?t=N7T8http://t.csdnimg.cn/ckqMs


目录

一、基础类型“浮点型”处理方法

1. 使用内置函数float()

2. 浮点数比较

3. 使用decimal模块

4. 使用fractions模块

 5. 格式化输出

 6. 四舍五入

 7. 使用math模块

8. 异常处理


一、基础类型“浮点型”处理方法

    在Python中,浮点型数据是用于表示实数的一种基本数据类型。由于浮点数的二进制表示和有限的精度,它们在进行数学运算时可能会产生一些意料之外的结果。以下是Python中处理浮点型数据的一些常见方法和技巧:

1. 使用内置函数float()

  • 可以将字符串或其他数值转换为浮点数。
num = float('123.45')
print(num)  # 输出: 123.45

2. 浮点数比较

  • 直接比较浮点数可能不准确,应使用一个很小的误差范围来判断是否接近,以下示例运算结果的错误证明了以上观点,在处理浮点型数据比较时,应避免直接使用浮点型数据直接进行运算尽可能的转换为Decimal类型记性计算。
  • 当直接比较浮点数时,由于浮点数的二进制表示以及计算过程中的舍入误差,即使理论上两个数应该相等,在实际计算中也可能得到不精确的结果。
a = 0.1 + 0.2
b = 0.3

if a == b:
    print("Numbers are equal.")
else:
    print("Numbers are not equal.")

print(a)  # 输出: 0.30000000000000004
print(b)  # 输出: 0.3

      为了避免这种问题,通常会使用一个很小的正数(称为“容差”或“epsilon”)来检查两个浮点数是否足够接近,而不是检查它们是否完全相等。


def is_close(a, b, rel_tol=1e-9, abs_tol=0.0):
# abs:返回参数的绝对值
# max:返回参数的最大值
    return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

print(is_close(0.1 + 0.2, 0.3))  # 输出: True

3. 使用decimal模块

  • 提供了高精度的十进制浮点算术。注意使用decimal类型进行数据计算,要统一所有数据类型均为decimal,否则会导致系统异常。
from decimal import Decimal, getcontext

getcontext().prec = 6  # 设置精度
a = Decimal('0.1')
b = Decimal('0.2')
c = Decimal('0.3')
print(a + b == c)  # 输出: True

4. 使用fractions模块

  • 可以将浮点数转换为分数形式,避免精度问题。
from fractions import Fraction

f = Fraction(0.1).limit_denominator()
print(f)  # 输出: 1/10

 5. 格式化输出

  • 使用formatf-string控制浮点数的输出格式。
x = 3.141592653589793
print(f'{x:.2f}')  # 输出: 3.14

 6. 四舍五入

  • 使用round()函数对浮点数进行四舍五入。
y = round(2.675, 2)
print(y)  # 输出: 2.68

 7. 使用math模块

  • 提供了各种数学函数,如sqrtlogsincos等。
import math

print(math.sqrt(16))  # 输出: 4.0

8. 异常处理

  • 当操作可能导致错误时,可以使用try...except语句捕获异常。
try:
    result = 1 / 0.0
except ZeroDivisionError:
    print("Cannot divide by zero")

需要Demo源码的同学,可以前往以下地址下载学习。

链接:https://pan.baidu.com/s/1ByWLkiXO9V5N2vjjvjpDkw?pwd=ucwg 
提取码:ucwg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值