1、python存在误差:
>>> 0.1 + 0.2 0.30000000000000004
>>> i = 0 >>> while i < 1: i = i + 0.1 print(i) 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999 0.8999999999999999 0.9999999999999999 1.0999999999999999
于是导致一个问题:
>>> 0.3 == 0.1 + 0.2 False >>> 0.3 < 0.1 + 0.2 True
绝对不可以!!!!!
【解决方法】借助“decimal模块”,然后使用“decimal”的“Decimal”来实例化一个对象【类和对象(后面会讲)】
如此,可以实现精度要求:
>>> import decimal >>> a = decimal.Decimal('0.1') >>> b = decimal.Decimal('0.2') >>> print(a + b) 0.3
或者
>>> import decimal >>> a = decimal.Decimal('0.1') >>> b = decimal.Decimal('0.2') >>> c = decimal.Decimal('0.3') >>> a + b == c True
2、python使用 “ E计数 ” ,即科学计数法
示例:
>>> 0.000005 5e-06
【 5e-06 】=【5×10**(-5)】
3、复数(以浮点数的形式存放)
示例:
>>> 1 + 2j (1+2j)
可以通过“.real”获取实部值,
可以通过“.imag”获取实部值:示例:
>>> x = 1 + 2j >>> x.real 1.0 >>> x.imag 2.0
4、数字运算(BIF函数)
(1)x // y 地板除__向下取整
>>> 3 / 2 1.5 >>> 3 // 2 1
【不合理之处】:
>>> -3 // 2 -2
(2)x % y __取余
>>> 3 % 2 1 >>> 6 % 2 0
【总结】 X == (x // y) * y + (x % y)
(3)故,有【divmod(x,y)】 操作(内置函数)__同时输出除数和余数(除数,余数)
>>> divmod(3,2) (1, 1) >>> divmod(-3,2) (-2, 1)
(4)abs(x)__取绝对值
__如果是复数,输出为模)>>> x = -520 >>> abs(x) 520 >>> z = 3 +4j >>> abs(z) 5.0
(5)int(x) __字符串→整数
__浮点数→保留整数部分(不是四舍五入)
>>> int("5") 5 >>> int(1.314) 1
错误:
>>> int("5.21")
Traceback (most recent call last):
File "<pyshell#76>", line 1, in <module>
int("5.21")
ValueError: invalid literal for int() with base 10: '5.21'
(6)float(x) __转为浮点数,可解决如上【错误:】
>>> float("5.21") 5.21 >>> float("520") 520.0 >>> float("+1E6") 1000000.0
(7)complex(re, im) __取复数的实部和虚部
>>> complex("1+2j") (1+2j) >>> complex(1,2) (1+2j) >>> complex(1,2j) (-1+0j)
注意: 此处不可以用空格“ ”
>>> complex("1 + 2j")
Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
complex("1 + 2j")
ValueError: complex() arg is a malformed string
(8)pow(x,y) __x的y次方
(9) x**y __x的y次方>>> pow(2, 3) 8 >>> 2 ** 3 8 >>> pow(2, -3) 0.125 >>> 2 ** -3 0.125
输入三个参数,可进行取余运算:
>>> pow(2, 3, 5) 3 >>> 2 ** 3 % 5 3