Python之运算

浮点数运算

如果直接进行浮点数运算,则可能会产生下列后果:

>>> x=2.1
>>> y=4.03
>>> x+y
6.130000000000001

这是因为计算机需要将十进制转化为二进制进行存储,而小数点后的数对于二进制来说是无限循环,而python是以双精度(64)位来保存浮点数,多余的位会被截掉,所以在计算时会产生误差。

方法一 round

>>> round(12.12345,3) 
12.123
>>> round(12.023+1.63013,2)
13.65
>>> round(12.000003,3)
12.0

上述方法在python2下,“Values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done away from 0.” 保留值将保留到离上一位更近的一端(四舍六入),如果距离两端一样远,则保留到离0远的一边。所以round(0.5)会近似到1,而round(-0.5)会近似到-1。

但在python3下,“values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done toward the even choice.” 如果距离两边一样远,会保留到偶数的一边。比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2。

总的来说,一般情况下四舍五入,当取到x.5时,python2的取法是取离0远的一端,python3的取法是取偶数。

但是,round(2.675, 2) 的结果,不论我们从python2还是3来看,结果都应该是2.68的,结果它偏偏是2.67,因为计算机在存储2.675时有误差,导致这个数实际上比2.675小,自然也就更偏向于2.67,四舍五入后也就得到2.67.

方法二 math

使用前导入math

import math

然后向上取整ceil:

>>> math.ceil(2.1)
3.0
>>> math.ceil(2.6)
3.0
>>> math.ceil(2.00001)
3.0
>>> math.ceil(2.50000)

向下取整是math.floor

方法三 decimal

>>> from decimal import Decimal
>>> from decimal import getcontext
>>> d=getcontext()  # 获取当前环境
>>> d.prec = 6       # 设置精度
>>> print d   #可以查看环境属性
Context(prec=6, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[DivisionByZero, Overflow, InvalidOperation])
>>> c = Decimal(1)/Decimal(3)
>>> print c
0.333333    #  6位精度

逻辑运算

  1. 符号
  • x and y:x非0时,返回y的值,x为0,输出False
  • x or y: x非0,返回x,x为0,返回y
  • not x:返回True 或 False
  1. 实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
a = 10
b = 20
 
if  a and b :
   print "1 - 变量 a 和 b 都为 true"
else:
   print "1 - 变量 a 和 b 有一个不为 true"
 
if  a or b :
   print "2 - 变量 a 和 b 都为 true,或其中一个变量为 true"
else:
   print "2 - 变量 a 和 b 都不为 true"
 
# 修改变量 a 的值
a = 0
if  a and b :
   print "3 - 变量 a 和 b 都为 true"
else:
   print "3 - 变量 a 和 b 有一个不为 true"
 
if  a or b :
   print "4 - 变量 a 和 b 都为 true,或其中一个变量为 true"
else:
   print "4 - 变量 a 和 b 都不为 true"
 
if not( a and b ):
   print "5 - 变量 a 和 b 都为 false,或其中一个变量为 false"
else:
   print "5 - 变量 a 和 b 都为 true"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值