decimal模块 --数字的精度、保留小数位数、取整问题
2016-04-18 17:53
639 查看
开始之前需要注意一点是:精度值为数字的总位数,如:1.23, 精度值为3; 0.123,精度值也为3
1、更改默认精度值后,直接进行计算即可保留对应精度值
2、小数保留位数问题
3、取整问题
需要记住几个参数:
ROUND_CEILING 总是趋向无穷大向上取整
ROUND_DOWN 总是趋向0取整
ROUND_FLOOR 总是趋向负无穷大向下取整
ROUND_HALF_DOWN 如果最后一个有效数字大于或等于5则朝0反方向取整;否则,趋向0取整
ROUND_HALF_EVEN 类似于ROUND_HALF_DOWN,不过,如果最后一个有效数字值为5,则会检查前一位。偶数值会导致结果向下取整,奇数值导致结果向上取整
ROUND_HALF_UP 类似于ROUND_HALF_DOWN,不过如果最后一位有效数字为5,值会朝0的反方向取整
ROUND_UP 朝0的反方向取整
ROUND_05UP 如果最后一位是0或5,则朝0的反方向取整;否则向0取整
写一个例子:
1、更改默认精度值后,直接进行计算即可保留对应精度值
from decimal import getcontext,Decimal getcontext().prec = 3 #设置精度值为3 f = 12.23435521 #type(f) : float value = Decimal(str(f)) #value: Decimal('12.23435521') #或:value = Decimal.from_float(f) print value*1 #Decimal('12.2') value = Decimal(1)/Decimal(3) print value #Decimal('0.333')
2、小数保留位数问题
from decimal import getcontext,Decimal f = 12.23435521 #type(f) : float value = Decimal(repr(f)).quantize(Decimal('0.000')) #保留3位小数,这里需要注意:在数字的精度值允许的范围内 print value #12.234
3、取整问题
需要记住几个参数:
ROUND_CEILING 总是趋向无穷大向上取整
ROUND_DOWN 总是趋向0取整
ROUND_FLOOR 总是趋向负无穷大向下取整
ROUND_HALF_DOWN 如果最后一个有效数字大于或等于5则朝0反方向取整;否则,趋向0取整
ROUND_HALF_EVEN 类似于ROUND_HALF_DOWN,不过,如果最后一个有效数字值为5,则会检查前一位。偶数值会导致结果向下取整,奇数值导致结果向上取整
ROUND_HALF_UP 类似于ROUND_HALF_DOWN,不过如果最后一位有效数字为5,值会朝0的反方向取整
ROUND_UP 朝0的反方向取整
ROUND_05UP 如果最后一位是0或5,则朝0的反方向取整;否则向0取整
写一个例子:
import decimal from decimal import getcontext,Decimal getcontext().prec = 1 getcontext().rounding = getattr(decimal, 'ROUND_CEILING') value = Decimal(1)/Decimal(8) print value # Decimal('0.2')
相关文章推荐
- 团队冲刺01
- 通过automator实现在finder下自动打开vim
- You-Get视频下载工具
- 练习二1012
- POJ 3321 Apple Tree (树状数组+dfs序)
- leetcode——72——Edit Distance
- Win8环境下OpenCL配置
- 《Linux及安全》期中总结&《Linux内核分析》期终总结
- 【技术干货】云计算的架构模式
- SQL service
- 使用PHP+JavaScript将HTML页面转换为图片的实例分享
- C实现的静态顺序表
- drupal access callback 所有用户都可以访问
- java线程安全的单例类
- SpringMVC层跟JSon结合
- java程序生成二维码
- ACM第二次练习—1017
- 负载均衡时 session 的处理策略
- 安卓webView,js交互
- 内存管理总结-引用计数