zoukankan      html  css  js  c++  java
  • decimal模块 --数字的精度、保留小数位数、取整问题

    开始之前需要注意一点是:精度值为数字的总位数,如:1.23, 精度值为3; 0.123,精度值也为3

    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') 
    

      

  • 相关阅读:
    jq-demo-阻止冒泡,阻止默认行为
    jq-demo-轮播图
    jq-demo-点击选择(英雄联盟)
    jq-demo-tab切换
    jq-demo-拖拽
    hdu 4031 Attack 线段树
    codeforces 633C. Spy Syndrome 2 hash
    sublime模式下开启vim并修改esc
    codevs 1256 打鼹鼠 LIS
    codevs 1455 路径 计算m^n%p
  • 原文地址:https://www.cnblogs.com/yxpblog/p/5405331.html
Copyright © 2011-2022 走看看