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