decimal四舍五入 python_python数字运算tips

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编程

专栏目录:目录

版本说明:软件及包版本说明

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值