需要处理金融相关数据,小数点位数要求6位,单纯使用 float 转化计算,导致小数位数变化且精度不满足要求,查阅相关资料后总结如下
1,基础
单精度型(float):在Turbo C中占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只提供7位有效数字。
双精度型(double):在Turbo C中占8个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。
2,低精度浮点数
2.1,内置方法 round()
round()不是简单的四舍五入的处理方式
如果只有一个数作为参数,不指定小数位数的时候,返回的是一个整数,而且是最靠近的整数
当出现.5的时候,两边的距离都一样,取靠近的偶数
round(2.5) ==> 2
round(3.5) ==> 4
round(2.65) ==> 3
当指定小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的这样情况,如果要取舍的位数前的小树是'奇数',则直接舍弃,如果'偶数'这向上取舍。
round(2.635, 2) ==> 2.63
round(2.645, 2) ==> 2.65
2.2,格式化方式
效果和 round()一样
s = ("%.2f" % 2.635) ==> 2.63
s = ("%.2f" % 2.645) ==> 2.65
3,高精度浮点数
3.1,内置模块 decimal 与 getcontext方法
import decimal
from decimal import Decimal, getcontext
getcontext().rounding = getattr(decimal, 'ROUND_HALF_UP') # 指定rounding策略,默认为ROUND_HALF_EVEN
s = Decimal('123.456').quantize(Decimal('0.000000'))
# Decimal('123.456') 以字符串形式输入小数,Decimal('0.000000') 指定小数点位数
"""
ROUND_HALF_DOWN 如果最后一个有效数字大于或等于5则朝0反方向取整;否则,趋向0取整
ROUND_HALF_EVEN 如果最后一个有效数字值为5,则会检查前一位。偶数值会导致结果向下取整,奇数值导致结果向上取整
ROUND_HALF_UP 如果最后一位有效数字为5,值会朝0的反方向取整
"""
3.2,其他
标签:Python,Decimal,round,有效数字,取整,HALF,ROUND,精度,小数
From: https://www.cnblogs.com/yhh5319/p/16771368.html