文章目录

  • 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相关推荐

  1. python中安装decimal模块_python decimal和fractions模块

    1.简介 默认,浮点数学缺乏精确性 decimal 模块提供了一个Decimal 数据类型用于浮点数计算.相比内置的二进制浮点数实现float这个类型有助于金融应用和其它需要精确十进制表达的场合,控制 ...

  2. Python中的decimal.Decimal类型和整型相乘后还是decimal.Decimal类型

    print(type(3 * decimal.Decimal('0.1'))) 输出: <class 'decimal.Decimal'> 但是可以转成float,仍然可以避免浮点误差: ...

  3. python decimal类型转化_python中的decimal类型转换实例详解

    [Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算. Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是 ...

  4. Python中处理时间 —— time模块

    time模块 逝去的秒数 逝去的秒数表示从某个时间(Python中是"Thu Jan 1 07:00:00 1970")开始到现在所经过的秒数. 使用 time.time() 函数 ...

  5. 下划线在 Python 中的特殊含义

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 Python 中的下划线 下划线在 Python 中是有特殊含义的 ...

  6. 第五章 python中正则表达式的使用

    第一节    正则表达式的一些介绍 1)掌握正则表达式的案例 2)写一个小爬虫 3)正则表达式(或RE)是一个小型的.高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实 ...

  7. python中的方法需要定义_Python中规范定义命名空间的一些建议

    API的设计是一个艺术活.往往需要其简单.易懂.整洁.不累赘. 很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的. 也就是说我们只需要暴露这个方法就行,不用关心这个方法是怎 ...

  8. python中的for语句涉及的序列可以是列表_Python中的列表与循环

    文章中的所有例子全部经过实际测试,可以直接使用.开发环境是python 3.8.5 条件和循环 本章的主要内容是Python的条件和循环语句.主要涉及if.else.elif.while.for.ra ...

  9. Python中浮点数精度处理

    from: Python中浮点数精度处理 Python中,浮点数运算,经常会碰到如下情况: 出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确. 比如说: 0.1是十进制,转 ...

最新文章

  1. python 从excel中抓取数据_使用Python抓取美团数据存于Excel中
  2. PHP json_encode 只支持utf8编码
  3. 【转】visual studio 2019 (vs) 显示右侧缩略图_缩略图_滚动条
  4. spark 广播变量大数据_大数据处理 | Spark集群搭建及基本使用
  5. 11个实用jQuery日历插件
  6. html页面顶部提示在更高浏览器下面提示语
  7. mysql 高效分页存储过程_mysql分页存储过程
  8. 自驾游你会经常自己做饭吗?
  9. 【Vue.js 知识量化】ES6 语法积累
  10. 大数据workshop:《云数据·大计算:海量日志数据分析与应用》之《社交数据分析:好友推荐》篇...
  11. 从客户端中(...)检测到有潜在危险的 Request.Form值
  12. centos下配置LNMP环境(源码安装)
  13. 给我“空降”一个弟兄
  14. 最适合游戏开发的语言是什么?
  15. 关于mysql的timestamp时间范围
  16. 结合GUI和simulink的三相电路谐波的检测与建模
  17. 马斯洛金字塔的大秘密
  18. Some NCCL operations have failed or timed out.
  19. JAVA线上故障排查全套路
  20. php 实现群发表结构,利用php怎么实现一个微信公众号无限群发功能

热门文章

  1. CSS实现骨架屏 Skeleton 效果
  2. win10系统卷影复制服务器,卷影复制Windows 10与全能备份软件
  3. 推荐系统学习(一)——推荐引擎初探
  4. 抖音3d照片怎么制作html,抖音制作3D卡通小人怎么制作用什么软件 操作步骤介绍...
  5. 手机QQ,登陆不上去
  6. 三维几何基础(3D?)
  7. 小说作者推荐:徐徐图之合集
  8. 日本的养老现状,会是我们的未来吗?
  9. OAuth2.0微信code获取失败怎么办
  10. mysql报ascii 0_导入mysql文件提示“ASCII '\0' appeared in the statement”