![c4e3dfc0c5742506e783e823bf1101c8.png](https://img-blog.csdnimg.cn/img_convert/c4e3dfc0c5742506e783e823bf1101c8.png)
本文讲一讲与python数字打交道时的一些注意事项,参考python cookbook一书
1.数字的四舍五入
一般有两种方法
round
函数真正四舍五入得到数字- 格式化字符串得到固定位数的字符串
如果只是要输出展示结果,用格式化字符串就可以了。因为只有要继续计算才需要结果是数,不过一般也不会使用近似后的结果来算。
2.浮点数的精确运算
2.1 + 4.2
# 6.300000000000001
2.1 + 4.2 == 6.3
# False
2.1 + 4.3
# 6.4
2.1 + 4.3 == 6.4
# True
python在浮点数计算时会有这样的小误差。如果真的需要非常精确,可以使用decimal
模块
from decimal import Decimal
Decimal('2.1') + Decimal('4.2')
# Decimal('6.3')
Decimal('2.1') + Decimal('4.2') == Decimal('6.3')
# True
print(Decimal('6.3'))
# 6.3
str(Decimal('6.3'))
# '6.3'
decimal 模块主要用在涉及到金融的领域,不允许出现一丝一毫误差的情况
python中在计算上的误差不只有这个,只有遇到了理解误差来源才是正道。如
nums = [1.23e+18, 1, -1.23e+18]
sum(nums)
# 0.0
import math
math.fsum(nums)
# 1.0
3.无穷数与缺失值的创建
通过float
可以创建无穷数与缺失值
float('inf')
# inf
float('-inf')
# -inf
float('nan')
# nan
注意它们不能用== is
判断是否相等,要用特殊的函数math.isnan math.isinf
c = float('nan')
d = float('nan')
c == d
# False
c is d
# False
import math
math.isnan(c)
# True
4.链式比较执行顺序
4 < 5 < 2
# False
python中这种形式表示5是否大于4且小于2,而不是其他编程语言中的4 < 5
返回True
即1,1 < 2
返回True
5.一个存储问题
一般内容相同的两个变量存储地址也是不同的
a = [1, 2]
b = [1, 2]
a is b
# False
但是整数却很特殊
a = 256
b = 256
a is b
# True
a = 257
b = 257
a is b
# False
出现这种现象的原因在于,python底层将值比较小的数(-5到256)的数分配了固定的内存,is
的功能正是比较内存,所以在那个范围内会一样。详情见这里。
6. 相等的整数和浮点数
直接看代码感受一下
1 == 1.0 # True
1 is 1.0 # False
1 in [1.0, 2.0] # True
import pandas as pd
x = pd.Series([1.0, 2.0])
x.isin([1, 3]).tolist() # [True, False]
这说明in
是基于==
来判断的,而不是is
。
专栏信息
专栏主页:python编程
专栏目录:目录
版本说明:软件及包版本说明