Python 3.X 中的 Number 类型包括 int(整型)、float(浮点型)和 complex (复数)三种。通常,定义数值型变量并赋值可以一步完成,例如:
a = 123
b = -123
在 Python 环境中可以使用以下代码查看当前计算机可以使用的 int 类型的最大值:
import sys
print(sys.maxsize)
上述代码在 Windows 7 SP1 和 MacOS HighSierra 10.13.3 上的运行结果如下所示:
>>> import sys
>>> print(sys.maxsize)
9223372036854775807
需要注意的是,在 Python 2.X 中使用 sys.maxint 来查看当前计算机可以使用的 int 类型的最大值。
Python 的 float 类型浮点数用机器上浮点数的本机双精度(64bit)表示。和 C语言的 Double 类型相同,float 类型提供大约 17 位的精度以及从 -308 到 308 的指数。Python 不支持 32 位的单精度浮点数。如果程序需要精确控制区间和数字精度,可以考虑使用 numpy 模块。在 Python 3.X 中浮点数默认是 17 位精度。
关于单精度和双精度:C语言中浮点型分为单精度和双精度两种。单精度使用 float 定义,双精度使用 double 定义。在 Turbo C 中单精度型占 4 个字节(32 位)内存空间,其数值范围为 3.4×10-38~3.4×1038,只能提供七位有效数字。双精度型占 8 个字节(64 位)内存空间,其数值范围为 1.7×10-308~1.7×10308,可提供 16 位有效数字。
int 型和 float 型数值可以直接进行加减乘除、乘方和取余等运算,例如:
5 + 4 #加法
4.3 – 2 #减法
3 * 7 #乘法
2 / 4 #除法,得到一个浮点数
2 // 4 #除法,得到一个整数
17 % 3 #取余
2 ** 5 #乘方
上述代码的运行结果如下所示:
>>> 5 + 4
9
>>> 4.3 – 2
2.3
>>> 3 * 7
21
>>> 2 / 4
0.5
>>> 2 // 4
0
>>> 17 % 3
2
>>> 2 ** 5
32
需要注意的是,单除号/
除法总是返回一个浮点数,要获取整数结果应使用双除号//
操作符。在混合计算时,Python 会将整数转换成为浮点数。
在实际工作中会遇到需要使用更高精度(超过 17 位小数)的情况,可以使用 decimal 模块,配合 getcontext( ) 函数使用。例如:
from decimal import *
print(getcontext ())
getcontext().prec = 50
print(Decimal(1)/Decimal(9))
print(Decimal(1)/Decimal(19))
print(float(Decimal(1)/Decimal(19)))
上述代码执行结果如下所示:
>>> 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 = 50
>>> print(Decimal(1)/Decimal(9))
0.11111111111111111111111111111111111111111111111111
>>> print(Decimal(1)/Decimal(19))
0.052631578947368421052631578947368421052631578947368
>>> print(float(Decimal(1)/Decimal(19)))
0.05263157894736842
在具体工作中,很多时候需要将精度高的 float 型数值转换为精度低的数值,通俗来说就是“四舍五入”,舍弃小数点右边的部分数据。在 Python 中通常使用内置的 round( ) 函数完成,例如执行:
round(1.5)
将得到结果“2”。但 round( ) 函数对于内置的数据类型而言,执行结果往往并不像所期待的那样,如果只有一个数作为参数,当不指定位数的时候,返回的是一个整数,而且是最靠近的整数(类似四舍五入)。
但是当出现“.5”的时候,两边的距离都一样,round( ) 取靠近的偶数。例如执行:
round(2.5)
round(2.675)
上述代码执行结果为:
>>> round(2.5)
2
>>> round(2.675)
3
对于指定保留小数位数的情况,如果要舍弃的部分最左侧是“5”,且“5”左侧是奇数则直接舍弃,若“5”左侧是偶数则向上取整,例如执行:
round(2.635, 2)
round(2.645, 2)
round(2.655, 2)
round(2.665, 2)
round(2.675, 2)
上述代码的运行结果为:
>>> round(2.635, 2)
2.63
>>> round(2.645, 2)
2.65
>>> round(2.655, 2)
2.65
>>> round(2.665, 2)
2.67
>>> round(2.675, 2)
2.67
除了 round( ) 函数,math 模块中的 ceil( ) 和 floor( ) 函数也可以实现向上或向下取整。例如:
from math import ceil, floor
round(2.5)
ceil(2.5)
floor(2.5)
round(2.3)
ceil(2.3)
floor(2.3)
上述代码的运行结果下所示:
>>> from math import ceil, floor
>>> round(2.5)
2
>>> ceil(2.5)
3
>>> floor(2.5)
2
>>> round(2.3)
2
>>> ceil(2.3)
3
>>> floor(2.3)
2
Python 使用 complex( ) 函数创建复数。其参数可以接受数值或字符串,例如:
print(complex(1)) #只有实部1
print(complex(1, 2)) #实部为1,虚部为 2
print(complex('1+2j')) #实部为1,虚部为 2
上述代码的运行结果为:
>>> print(complex(1))
(1+0j)
>>> print(complex(1, 2))
(1+2j)
>>> print(complex('1+2j'))
(1+2j)
第二个参数不能传入字符串。当希望从一个字符串的复数形式转换复数时,需要注意的是字符串中不能出现空格,比如可以写成:
complex('1+2j')
而不能写成
complex('1 +2j')
或
complex('1 + 2j')
否则会返回 ValueError 异常。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/21385.html