Python中的Decimal
文章目录
- 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
- 2.要从浮点数据转换为Decimal类型
- 3.getcontext().prec设置有效数字的个数
- 4.四舍五入,保留几位小数
- 5.Decimal 结果转化为string
- 6.decimal模块进行十进制数学计算
- 7.python decimal.quantize()参数rounding的各参数解释与行为
1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
# coding=utf-8
from decimal import Decimal, getcontext# 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
# 传入浮点数 5.55
a = Decimal(5.55)
print('a = ', a)
a = a * 100
print('a = ', a)
# 传入字符串 ‘5.55’
b = Decimal('5.55')*100
print('b = ', b)>>> a = 5.54999999999999982236431605997495353221893310546875
>>> a = 554.9999999999999822364316060
>>> b = 555.00
2.要从浮点数据转换为Decimal类型
# 2.要从浮点数据转换为Decimal类型
c = Decimal.from_float(22.222)
print('c = ', c)>>> c = 22.22200000000000130739863379858434200286865234375
3.getcontext().prec设置有效数字的个数
# 3.getcontext().prec设置有效数字的个数。
# 通过设定有效数字,限定结果样式
getcontext().prec = 4
x1 = Decimal(1) / Decimal(3) # 结果为Decimal('0.3333'),四个有效数字
print('x1 = ', x1)
x2 = Decimal(100) / Decimal(3)
print('x2 = ', x2)
x3 = Decimal(700000)/Decimal(9)
print('x3 = ', x3)>>> x1 = 0.3333
>>> x2 = 33.33
>>> x3 = 7.778E+4
# 注意:
# 如果prec的长度比数字的长度小的时候,*100得出的数就不对了
num = '88.8888'
f = Decimal(num)
print('f = ', f)
g = f * 100
print('g = ', g)
h = Decimal('999.999')
print('h = ', h)>>> f = 88.8888
>>> g = 8889
>>> h = 999.999
4.四舍五入,保留几位小数
# 4.四舍五入,保留几位小数
d = Decimal('50.5679').quantize(Decimal('0.00'))
print('d = ', d) # 结果为Decimal('50.57'),结果四舍五入保留了两位小数>>> d = 50.57
5.Decimal 结果转化为string
# 5.Decimal 结果转化为string
e = str(Decimal('3.40').quantize(Decimal('0.0')))
print('e = ', e)>>> e = 3.4
6.decimal模块进行十进制数学计算
# 6.decimal模块进行十进制数学计算
i = Decimal('4.20') + Decimal('2.10') + Decimal('6.30')
print('i = ', i)>>> i = 12.60
# 当然精度提升的同时,肯定带来的是性能的损失。在对数据要求特别精确的场合(例如财务结算),这些性能的损失是值得的。
# 但是如果是大规模的科学计算,就需要考虑运行效率了。毕竟原生的float比Decimal对象肯定是要快很多的。
7.python decimal.quantize()参数rounding的各参数解释与行为
- ROUND_CEILING (towards Infinity),
- ROUND_DOWN (towards zero),
- ROUND_FLOOR (towards -Infinity),
- ROUND_HALF_DOWN (to nearest with ties going towards zero),
- ROUND_HALF_EVEN (to nearest with ties going to nearest even integer),
- ROUND_HALF_UP (to nearest with ties going away from zero), or
- ROUND_UP (away from zero).
- ROUND_05UP (away from zero if last digit after rounding towards zero would have been 0 or 5; otherwise towards zero)
x = Decimal('-3.1415926535') + Decimal('-2.7182818285')
print x
print x.quantize(Decimal('1.0000'), ROUND_HALF_EVEN)
print x.quantize(Decimal('1.0000'), ROUND_HALF_DOWN)
print x.quantize(Decimal('1.0000'), ROUND_CEILING)
print x.quantize(Decimal('1.0000'), ROUND_FLOOR)
print x.quantize(Decimal('1.0000'), ROUND_UP)
print x.quantize(Decimal('1.0000'), ROUND_DOWN)output:
-5.8598744820
-5.8599
-5.8599
-5.8598
-5.8599
-5.8599
-5.8598https://www.cnblogs.com/piperck/p/5843253.html
https://blog.csdn.net/weixin_37989267/article/details/79473706
- ROUND_HALF_EVENT 和 ROUND_HALF_DOWN:EVENT是quansize的默认设置值,可以通过getcontext()得到,EVENT四舍五入进了一位,DOWN为接近最近的0进了一位。
- ROUND_CEILING 和 ROUND_FLOOR:CEILING超过5没有进位是因为它倾向正无穷,FLOOR为了总是变得更小所以进了一位。
- ROUND_UP 和 ROUND_DOWN:UP始终进位,DOWN始终不会进位。
总结:
- 其实这里我们通过上面一组例子可以发现,正数的行为非常可预期也非常简单,负数的情况稍复杂,有些函数就是设计为负数在某些情况中使用的。
- 正数中无法重现的ROUND_DOWN和ROUND_FLOOR的区别,ROUND_DOWN是无论后面是否大于5都不会管保持原状,而Floor在正数中的行为也是如此,
- 但是在负数中为了倾向无穷小,所以无论是否大于5,他都会变得更小而进位。
- 反而ROUND_UP和ROUND_DOWN的行为是最可预期的,那就是无论后面数大小,UP就进位,DOWN就始终不进位。
Python中的Decimal相关推荐
- python中安装decimal模块_python decimal和fractions模块
1.简介 默认,浮点数学缺乏精确性 decimal 模块提供了一个Decimal 数据类型用于浮点数计算.相比内置的二进制浮点数实现float这个类型有助于金融应用和其它需要精确十进制表达的场合,控制 ...
- Python中的decimal.Decimal类型和整型相乘后还是decimal.Decimal类型
print(type(3 * decimal.Decimal('0.1'))) 输出: <class 'decimal.Decimal'> 但是可以转成float,仍然可以避免浮点误差: ...
- python decimal类型转化_python中的decimal类型转换实例详解
[Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算. Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是 ...
- Python中处理时间 —— time模块
time模块 逝去的秒数 逝去的秒数表示从某个时间(Python中是"Thu Jan 1 07:00:00 1970")开始到现在所经过的秒数. 使用 time.time() 函数 ...
- 下划线在 Python 中的特殊含义
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 Python 中的下划线 下划线在 Python 中是有特殊含义的 ...
- 第五章 python中正则表达式的使用
第一节 正则表达式的一些介绍 1)掌握正则表达式的案例 2)写一个小爬虫 3)正则表达式(或RE)是一个小型的.高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实 ...
- python中的方法需要定义_Python中规范定义命名空间的一些建议
API的设计是一个艺术活.往往需要其简单.易懂.整洁.不累赘. 很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的. 也就是说我们只需要暴露这个方法就行,不用关心这个方法是怎 ...
- python中的for语句涉及的序列可以是列表_Python中的列表与循环
文章中的所有例子全部经过实际测试,可以直接使用.开发环境是python 3.8.5 条件和循环 本章的主要内容是Python的条件和循环语句.主要涉及if.else.elif.while.for.ra ...
- Python中浮点数精度处理
from: Python中浮点数精度处理 Python中,浮点数运算,经常会碰到如下情况: 出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确. 比如说: 0.1是十进制,转 ...
最新文章
- python 从excel中抓取数据_使用Python抓取美团数据存于Excel中
- PHP json_encode 只支持utf8编码
- 【转】visual studio 2019 (vs) 显示右侧缩略图_缩略图_滚动条
- spark 广播变量大数据_大数据处理 | Spark集群搭建及基本使用
- 11个实用jQuery日历插件
- html页面顶部提示在更高浏览器下面提示语
- mysql 高效分页存储过程_mysql分页存储过程
- 自驾游你会经常自己做饭吗?
- 【Vue.js 知识量化】ES6 语法积累
- 大数据workshop:《云数据·大计算:海量日志数据分析与应用》之《社交数据分析:好友推荐》篇...
- 从客户端中(...)检测到有潜在危险的 Request.Form值
- centos下配置LNMP环境(源码安装)
- 给我“空降”一个弟兄
- 最适合游戏开发的语言是什么?
- 关于mysql的timestamp时间范围
- 结合GUI和simulink的三相电路谐波的检测与建模
- 马斯洛金字塔的大秘密
- Some NCCL operations have failed or timed out.
- JAVA线上故障排查全套路
- php 实现群发表结构,利用php怎么实现一个微信公众号无限群发功能
热门文章
- CSS实现骨架屏 Skeleton 效果
- win10系统卷影复制服务器,卷影复制Windows 10与全能备份软件
- 推荐系统学习(一)——推荐引擎初探
- 抖音3d照片怎么制作html,抖音制作3D卡通小人怎么制作用什么软件 操作步骤介绍...
- 手机QQ,登陆不上去
- 三维几何基础(3D?)
- 小说作者推荐:徐徐图之合集
- 日本的养老现状,会是我们的未来吗?
- OAuth2.0微信code获取失败怎么办
- mysql报ascii 0_导入mysql文件提示“ASCII '\0' appeared in the statement”