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

转载于:https://www.cnblogs.com/jasmine0627/p/9330985.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值