#1 对数值进行取整:
# 1.1 问题: 对浮点型数据取固定小数位的小数
# 1.2 解决方案: 简单的取整操作,使用内建的round(value,ndigits)即可
#round的ndigits省略时,会取得整型;当ndigits == 0时,取得小数;
#ndigits可以取负值,一次为十位、百位、千位等
#当负数值大于位数最大值是,会得到这个数字对应数据类型的‘0’(整0和浮点0)
#eg:
print(round(1.222,2))# 1.22
print(round(1.27,1))# 1.3
print(round(-1.227,2))# -1.23
print(round(-1.33,3))# -1.33
print(round(1.222,-1))# 0.0
print(round(8.5,0))# 4.0
print(round(2.5))# 2 #注意: 当一个数字恰好是两个整数间的一半时,取证操作会取到离该值最接近的那个偶数上;
print(round(123123,-2)) #123100
print(round(123,-4)) # 0
#2 执行精确的小数计算
#2.1 不希望浮点天生的误差带来影响:
#2.2 解决方案:
a = 2.1
b = 4.2
print(a+b)#6.300000000000001
if a+b == 6.3:
print(‘a’)
else:
print(‘b’)
#此方法可以获得更加准确的浮点型:
from decimal import Decimal
a = Decimal(‘2.1’)
b = Decimal(‘4.2’)
print(a+b)# 6.3
if (a+b) == Decimal(‘6.3’):
print(‘right’)
#decimal模块的主要功能允许控制计算过程中的各个方面,包括数字的位数和四舍五入。
#要做到这些,需要创建一个本地的上下文环境然后修改其设定
from decimal import Decimal, localcontext
a = Decimal(‘1.3’)
b = Decimal(‘1.7’)
print(a/b)#0.7647058823529411764705882353
with localcontext() as ctx:
ctx.prec = 3
print(a / b)#0.765
with localcontext() as ctx:
ctx.prec = 50
print(a/b)#0.76470588235294117647058823529411764705882352941176
#float 类型支持小数点后17位
nums = [1.23e+18,1,-1.23e+18]
print(sum(nums)) #0.0
import math
summ=math.fsum(nums)
print(summ) #1.0
#综上decimal 运用于金融行业,在使用python作为数据库接口时,尤其会发现有很多的decimal模块的出现