从功能上说,小数对象decimal就像浮点数,只不过它们有固定的位数和小数点,因此小数是有固定的精度的浮点值。因此,常常使用Decimal小数类型来处理固定精度的数字。
常用方法
1. 通过调用在decimal模块中的Decimal的构造函数来创建一个小数对象,并传入一个字符串。可以传递给Decimal模块整形或者字符串参数,但不能是浮点数据,因为浮点数句本身就不准确。
from decimal import getcontext, Decimal
x = Decimal('0.1')
type(x)
decimal.Decimal
y = Decimal(0.1)
type(y)
decimal.Decimal
2.通过设定有效数字,限定结果样式:
import deecimal
#设定有效位数为四位,注意这个方法只在decimal数据进行计算时才会应用
decimal.getcontext().prec = 4
decimal.Decimal(1)/decimal.Decimal(7)
Decimal('0.1429')
3.从浮点数转化为Decimal
刚刚说到,构建decimal小数类型的方法是传入一个字符串或整形参数,那么如何使浮点数转化为Decimal呢?
from decimal import *
Decimal.from_float(12.222)
4.四舍五入定点保留小数位数
from decimal import *
Decimal('50.5679').quantize(Decimal('0.00'))
# 结果为Decimal('50.57'),结果四舍五入保留了两位小数
5.Decimal 结果转化为string
from decimal import *
str(Decimal('3.40').quantize(Decimal('0.0')))
# 结果为'3.40',字符串类型
6.浮点数格式化
如果担心使用Decimal太过精度,可以直接使用浮点数格式化来进行操作:
需要注意的是,前面用于控制精度,后面的需要是float型,输出的为str类型
comment_brief['poor_rate'] = ("%.5f" % float(comment_brief.get('poor_rate')))
`