Decimal模块功能大全?
目前只会用Decimal模块来计算浮点数这种极其easy的操作{:5_96:}求进阶
import decimal as ds
i = 0
while i <= 1:
i += ds.Decimal('0.1')
print(i) 鱼油你好!Decimal模块除了算浮点数,还有很多强大功能,下面给你一一介绍。
1. 基础回顾
Decimal(str)可以精确表示十进制浮点数,避免二进制误差。
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2'))# 0.3
2. 精度控制(Context)
用getcontext()获取当前上下文,修改prec可控制有效数字位数。
import decimal
decimal.getcontext().prec = 6
print(Decimal('1') / Decimal('3'))# 0.333333
用localcontext()可以临时改变精度而不影响全局。
with decimal.localcontext() as ctx:
ctx.prec = 10
result = Decimal('1') / Decimal('7')
print(result)
3. 舍入模式
rounding属性控制舍入方式,例如:
decimal.getcontext().rounding = decimal.ROUND_DOWN
print(Decimal('2.345').quantize(Decimal('0.01')))# 2.34
常用模式有:
[*]ROUND_DOWN 向零舍入
[*]ROUND_UP 远离零舍入
[*]ROUND_HALF_EVEN 银行家舍入(默认)
[*]ROUND_HALF_UP 四舍五入
[*]ROUND_CEILING 向正无穷
[*]ROUND_FLOOR 向负无穷
4. 特殊值
Decimal支持Infinity、-Infinity、NaN等。
print(Decimal('Infinity') > Decimal('999999'))
print(Decimal('NaN').is_nan())
5. 数学函数
Decimal提供丰富的数学方法:
[*].sqrt() 平方根
[*].exp() e的指数
[*].ln() 自然对数
[*].log10() 以10为底对数
[*].fma(other, third) 融合乘加(a*b+c)
[*].max/.min 取最大/最小
[*].copy_abs() 绝对值
[*].copy_negate() 取负
d = Decimal('4')
print(d.sqrt()) # 2
print(d.exp()) # 54.598...
6. 比较与判断
Decimal之间可以直接比较,还提供一些判断方法:
d = Decimal('5')
print(d.is_finite()) # True
print(d.is_integer())# True
print(d.is_zero()) # False
7. 转换与分解
as_tuple()可得到符号、数字、指数;也可从元组创建。
d = Decimal('-12.34')
print(d.as_tuple())# DecimalTuple(sign=1, digits=(1,2,3,4), exponent=-2)
print(Decimal((1, (1,2,3,4), -2)))# -12.34
8. 格式化输出
用quantize()指定小数位数,或直接用format()。
d = Decimal('3.14159')
print(d.quantize(Decimal('0.00')))# 3.14
print(f"{d:.3f}")# 3.142
9. 信号与陷阱
Decimal会抛出异常信号,例如DivisionByZero、InvalidOperation。可设置陷阱控制是否报错。
with decimal.localcontext() as ctx:
ctx.traps = True
try:
Decimal('1') / Decimal('0')
except decimal.DivisionByZero:
print('除零错误!')
10. 其他常用方法
[*].adjusted() 返回指数调整值(表示位数)
[*].normalize() 去掉多余尾零
[*].scaleb(n) 乘以10的n次方
[*].same_quantum(other) 判断指数是否相同
[*].to_integral() 取整
总之,Decimal模块核心是:精确的十进制运算 + 可控的精度/舍入 + 丰富的数学功能。掌握这些,你就能从“只能算浮点数”进阶到熟练运用啦!如有具体问题,欢迎继续问~
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]