Python小数精度

需要处理金融相关数据,小数点位数要求6位,单纯使用 float 转化计算,导致小数位数变化且精度不满足要求,查阅相关资料后总结如下

1,基础

单精度型(float):在Turbo C中占4个字节(32位)内存空间,其数值范围为3.4E-383.4E+38,只提供7位有效数字。
双精度型(double):在Turbo C中占8个字节(64位)内存空间,其数值范围为1.7E-3081.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,其他


posted @   interesting5319  阅读(274)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示