首页 > 编程语言 >Python小数精度

Python小数精度

时间:2022-10-09 10:56:39浏览次数:57  
标签:Python Decimal round 有效数字 取整 HALF ROUND 精度 小数

需要处理金融相关数据,小数点位数要求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

相关文章

  • Python 生成的页面中文乱码问题
    第一保证程序源文件中的中文的编码格式,如我们把源文件的编码设置成utf8的。reload(sys)sys.setdefaultencoding(‘utf-8’)第二,告诉浏览器,我们需要用什么格式来展示......
  • 力扣219(java&python)-存在重复元素 II(简单)
    题目:给你一个整数数组 nums和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,满足nums[i]==nums[j]且abs(i-j)<=k。如果存在,返回true;否则,返回f......
  • Python函数-2V2
    一.导入$$f(x,y)=2x+3y$$上面括号里面的就是数学公式里的自变量,自变量就相当于函数里的参数。二.为什么要有参数如果一个大楼里有两种尺寸不一的窗户,显然......
  • 大坝安全监测系统 北斗GNSS高精度定位终端应用
    大坝安全监测系统北斗GNSS高精度定位终端应用北斗GNSS高精度定位终端TN521下水库大坝安全监测系统具备远程在线变形监测、位移监测,压力监测、渗流监测等功能,支持全网......
  • python中的subprocess.Popen | 9
    在收集snmp数据的过程中用到了subprocess这个模块,本来想用其他python里面关于snmp的库,还是觉得麻烦就直接调用snmpwalk来收集数据。最开始想用subprocess.call()这个函数,然而......
  • 深度剖析CPython解释器》Python内存管理深度剖析Python内存管理架构、内存池的实现原
    目录1.楔子第1层:基于第0层的"通用目的内存分配器"包装而成。第2层:在第1层提供的通用*PyMem_*接口基础上,实现统一的对象内存分配(object.tp_alloc)第3层:为特定对象服务are......
  • MobaXterm注册认证版,亲测可用,操作简单(本机已安装python3环境)
    去github地址下下载代码  解压后在该目录下打开CMD执行MobaXterm-Keygen.py<UserName><Version>命令  生成的文件放在安装目录下,我的是免安装版,放在exe同目......
  • python学习日志
    python学习日志语法简单和传统的C/C++、Java、C#等语言相比,Python对代码格式的要求没有那么严格,这种宽松使得用户在编写代码时比较舒服,不用在细枝末节上花费太多精力......
  • Python pandas DataFrame 行列的常用操作及运算
    Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量......
  • python 循环调用问题most likely due to a circular import的解决方法
    网上看了很多资料都无法解决,如修改class的名字,无法解决;看了一遍帖子是与import内存执行顺序有关系 解决方法:在局部使用位置进行import调用 ......