python 小数精度_py_28 Decimal处理小数计算精度问题

python Decimal这个类处理浮点数精度

浮点数在内存中存储的时候因为存储机制的原因,天然存在精度丢失的现象,比如2.2*3不等于6.6.所以小数在计算的时候值的精度一直是个问题。Decimal就是来处理精度问题。但是处理过后性能堪忧。所以写代码的,除浮点数之外参与运算,其他尽量不用Decimal处理。

"""浮点数在内存中存储的时候因为存储机制的原因,天然存在精度丢失的现象"""

# 比如 2.2 *3 并不是等于6.6

a = 2.2 *3 # 6.6000000000000005

print(a)

# 如果一个数字处在两个整数中间的时候,round方法会返回离的最近的偶数。

print(round(2.5)) # 等于2 而不是四舍五入等于3。看来round函数也不靠谱。

# python的模块decimal

from decimal import *

"""Create a decimal point instance.

>>> Decimal('3.14') # string input

Decimal('3.14')

>>> Decimal((0, (3, 1, 4), -2)) # tuple (sign, digit_tuple, exponent)

Decimal('3.14')

>>> Decimal(314) # int

Decimal('314')

>>> Decimal(Decimal(314)) # another decimal instance44444444444

Decimal('314')

>>> Decimal(' 3.14 \\n') # leading and trailing whitespace okay

Decimal('3.14')

"""

# 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确

num1 = Decimal("2.2")* 3 # 6.6 返回的是 Decimal类型

print(num1,type(num1))

# 传入的是一个int

num2 = Decimal(2)

print(num2) # 2

# 2.内置函数 float int 可以用来转化Decimal

print(float(num1)) # 6.6

# 3.通过设定有效数字,限定结果样式:

getcontext().prec = 4

print(Decimal("5")/Decimal("7.8")) # 0.6410 4个有效数字

# 4. 四舍五入 quantize(Decimal("2.11")) "2.11"是2个小数点

print(Decimal("0.657").quantize(Decimal("2.11"))) # 0.66

print(Decimal('50.5679').quantize(Decimal('0.00'))) # 50.57

# 5.Decimal 结果转化为string

print(str(Decimal("0.657").quantize(Decimal("2.11")))) # 0.66

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值