13、Python浮点数与增强运算符详解:从精度处理到实战应用

适合人群:零基础自学者 | 编程小白快速入门
阅读时长:约6分钟

一、问题:Python的浮点数和浮点数类型转换?

1、例子1:超市结账比喻:为什么0.1+0.2≠0.3?

# 浮点数精度问题演示  
print(0.1 + 0.2)  # 输出:0.30000000000000004  
print(0.1 + 0.2 == 0.3)  # 输出:False → 像超市结账时的分币误差  

# 精确计算方案  
from decimal import Decimal  
print(Decimal('0.1') + Decimal('0.2'))  # 输出:0.3  

关键说明

  • 浮点数像带刻度的量杯,存在微小测量误差
  • decimal模块采用十进制运算(非二进制),类似会计用的电子秤,可精确控制小数位数

2、例子2:自动转型案例、四舍五入的特殊规则

# 温度单位转换器
celsius = 37.5  
fahrenheit = celsius * 1.8 + 32  
print(f"体温:{fahrenheit:.1f}℉")  # 输出:体温:99.5℉  

# 自动转型验证  
result = 5 + 3.0     # 整数 + 浮点数 = 浮点数
print(type(result))   # <class 'float'> → 自动升级为浮点型

# 四舍五入的特殊规则
print(round(2.5))    # 输出:2
# 解释:银行家舍入法(四舍六入五成双):当舍入位是5时,若前一位是偶数则舍,奇数则入
print(round(3.5))    # 输出:4  
print(round(9.4999))  # 输出:9  

3、答案:

(1)Python的浮点数

  1. 浮点数 float 用小数或科学计数法表示,如:3.14 表示成 314E-2 或者 341e-2 (相当于 314*10-2
  2. 由于二进制浮点数精度限制,进行精确计算(如财务运算)时应当使用 decimal 模块。

(2)浮点数的自动转换、强制转换和四舍五入

  1. 强制转换:使用 float() 将其他类型转换成浮点数
  2. 自动转换:整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如: 2+8.0 的结果是 10.0
  3. 四舍五入round(value) 可以返回四舍五入的值。但不会改变原有的值,而是产生新的值。

二、问题:Python的增强赋值运算符?

1、例子1:游戏金币计数器

gold = 100  
gold *= 2   # 金币翻倍  
gold -= 50  # 购买道具  
print(f"剩余金币:{gold}")  # 输出:剩余金币:150  

2、答案:

(1)增强赋值运算符

  1. 运算符+-*///**% 和赋值符 = 结合,可以构成增强赋值运算符。

增强赋值运算符如下:

运算符例子等价
+=a += 2a = a + 2
-=a -= 2a = a-2
*=a *= 2a = a * 2
/=a /= 2a = a / 2
//=a //= 2a = a//2
**=a **= 2a = a**2
%=a %= 2a = a % 2

(2)⚠ 新手注意

  1. += 中间不能加空格!
  2. 结合的是右侧整个表达式:y *= x+2 # 相当于:y = y*(x+2) 而不是:y = y*x+2

三、动手试一试

  1. 浮点数转换验证 。
# 观察数据类型自动转换  
a = 5 + 3.0  
print(a)           # 输出:_____  
print(type(a))     # 输出:_____  

# 强制类型转换练习  
price = "9.9"  
float_price = _____  # 补全代码(将字符串转为浮点数)  
print(float_price)   # 输出:9.9  

参考答案:

a = 5 + 3.0  
print(a)           # 输出:8.0  
print(type(a))     # 输出:<class 'float'>  

float_price = float(price)  
  1. 增强赋值运算符应用。
# 游戏金币计数器  
gold = 100  
gold += 50   # 拾取金币  
gold *= 2    # 触发双倍奖励  
gold -= 30   # 购买道具  

print(f"最终金币:{gold}")  # 输出:_____  

参考答案:
最终金币:270
计算过程

100 + 50 = 150  
150 * 2 = 300  
300 - 30 = 270  

📢 互动区
👉 遇到问题?在评论区:

  1. 描述问题(带代码截图更好)
  2. 分享学习心得
  3. 给文章提建议

支持作者:点赞 | 收藏 | 关注
你的三连是我更新的最大动力!


👉 下篇预告
14、时间的表示_unix时间点_毫秒微妙_time模块
→ Unix时间点原理与时间戳获取实战
→ 代码耗时统计与时间单位转换技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值