zoukankan      html  css  js  c++  java
  • Python浮点型数据小数点的取舍

    python默认的是17位小数的精度

    1、round()内置方法

    π=3.1415926535

    new_num=round(π,2)     #四舍五入保留两位小数

    print(new_num)              #结果为:3.14

    round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数(这点上类似四舍五入)。但是当出现.5的时候,两边的距离都一样,round()取靠近的偶数,这就是为什么

    round(2.5) = 2。当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的这样情况,如果要取舍的位数前的小数是奇数,则直接舍弃,如果偶数这向上取舍。

    2、格式化(效果等同于round())

    >>> a=('%.2f'%3.235)
    >>> a
    '3.23'
    >>> a=('%.2f'%3.245)
    >>> a
    '3.25'
    >>> a=int(6.5)
    >>> a
    6
    >>> a=int(6.665)
    >>> a
    6
    超过17位小数的高精度

    1、使用格式化(不推荐)

    >>> a='%.20f'%(1/3)
    >>> a
    '0.33333333333333331483'

    可以看出结果不准确,后面的数字往往没有意义。

    2、使用decimal模块,配合getcontext

    >>> from decimal import *
    >>> print(getcontext())
    Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
    >>> getcontext().prec=20
    >>> b=decimal(1)/decimal(3)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'decimal' is not defined
    >>> b=Decimal(1)/Decimal(3)
    >>> b
    Decimal('0.33333333333333333333')
    >>> c=Decimal(1)/Decimal(17)
    >>> c
    Decimal('0.058823529411764705882')
    >>> float(c)
    0.058823529411764705

    取整数

    1、round()上面已经讲过了,这里就不再做说明

    2、math模块的ceil(x)

    取大于或者等于x的最小整数。

    >>> from math import *
    >>> x=6.56
    >>> ceil(x)
    7
    >>> x=6.06
    >>> ceil(x)
    7

    3、math模块的floor(x)

    取小于或者等于x的最大整数。

    >>> from math import *

    >>> x=8.00001
    >>> floor(x)
    8
    >>> x=8.9999999999
    >>> floor(x)
    8

    4、math模块的trunc(x)

    截断除法,返回x的整数部分

    >>> from math import *
    >>> a=trunc(5.6789)
    >>> a
    5
    >>> a=trunc(5.1234)
    >>> a
    5

    >>> pi       #数字常量,圆周率
    3.141592653589793

    >>> a=trunc(pi)
    >>> a
    3

     round()函数当中有许多小坑

    >>> a=round(1.675, 2)
    >>> a
    1.68
    >>> a=round(2.675, 2)
    >>> a
    2.67

    这些坑笔者也没搞清楚怎么回事,希望各位大佬指点

    参考资料:https://www.cnblogs.com/herbert/p/3402245.html

  • 相关阅读:
    红黑树——以无厚入有间
    红黑树——依天理以神遇
    B-树 分合之道
    B-树 动机与结构
    云心出岫——Splay Tree
    双散列和再散列暨散列表总结
    开放定址法——平方探测(Quadratic Probing)
    [LeetCode 109]
    [LeetCode 110]
    [LeetCode 111]
  • 原文地址:https://www.cnblogs.com/jasmine0627/p/9330985.html
Copyright © 2011-2022 走看看