Python 教程(四) —— 数字
Python 数字分为:int(整型),float 和 Decimal(浮点型),Fractions(分数)以及 Complex(复数)文章目录
一、整数
Int 或整数是完整的数字,正数或负数,没有小数,长度不限。
a = 12
b = -56
c = 6484613213548489
print(type(a))
print(type(b))
print(type(c))
输出:
>>> <class 'int'>
>>> <class 'int'>
>>> <class 'int'>
二、浮点数
“浮点数”是包含小数的正数或负数。同时浮点数也可以是带有“e”的科学数字,表示 10 的幂。
a = 12.63
b = -56.56
c = 6484613213548489.549849489
# 科学数字
d = 894e2
print(type(a))
print(type(b))
print(type(c))
print(type(d))
输出:
>>> <class 'float'>
>>> <class 'float'>
>>> <class 'float'>
>>> <class 'float'>
三、复数
复数用 “j” 作为虚部编写:
a = 5+6j
b = 6j
c = -6j
print(type(a))
print(type(b))
print(type(c))
输出:
<class 'complex'>
<class 'complex'>
<class 'complex'>
四、分数
Python支持分数的计算:
from fractions import Fraction
print(Fraction(5, 6))
print(Fraction(5, -6))
print(Fraction(10, 8))
print(Fraction(10, 8) + 1.2)
print(Fraction(10, 8) * 2)
print(Fraction(10, 8) / 2)
输出:
5/6
-5/6
5/4
2.45
5/2
5/8
五、Decimal 十进制浮点运算(对象不可变)
1. 自定义位数
相比较 float 浮点数的计算,Decimal 更加趋向于现实数字的计算,更加精确,通常用于对于精度要求比较高的金融以及科学计算上。
而且 Decimal 具有有效位的概念,能*决定保留位数,可以通过下面的例子来看:可以看到,decimal 可以通过 quantize 方法来限定位数。
from decimal import Decimal
a = Decimal(5.698).quantize(Decimal('.1'), rounding='ROUND_DOWN')
b = Decimal(6.23).quantize(Decimal('0.01'), rounding='ROUND_UP')
print(a)
print(b)
输出:
5.6
6.24
2. 其他数字转换为Decimal计算
(一)整数及字符串转换
普通的整数以及字符串转换直接赋值到 Decimal 构造就行。当然,整数及字符串都转换成 Decimal 以后可以直接进行数学运算.
from decimal import Decimal
a = Decimal(2)
b = Decimal('5')
c = Decimal('5.26')
e = Decimal(2 + 5)
print(a)
print(b)
print(c)
print(e)
# 数字运算
print(a + c)
输出:
2
5
5.26
7
7.26
(二)浮点数转换
浮点数的转换因为二进制转换为十进制,所以需要53位或更多位数来填充精度。在转换的时候如果有精度要求,可以直接用 quantize 方法预设精度。
from decimal import Decimal
print(Decimal(1.2))
print(Decimal(2.5))
print(Decimal.from_float(3.6))
print(Decimal(3.6).quantize(Decimal('0.001'), rounding='ROUND_DOWN'))
输出:
1.1999999999999999555910790149937383830547332763671875
2.5
3.600000000000000088817841970012523233890533447265625
3.600
(三)元组转换
元组转换成 Decimal 需要特定的格式来进行:(符号, (tuple), 精度)
名词 | 符号 | 解释 |
---|---|---|
符号 |
0 或 1
|
0 表示正数,1 表示负数 |
tuple | (1, 2, 5, 7) |
中间 tuple 部分表示要拼接的内容 |
精度 | 正整数或负整数 | 元组最后一位开始精确到第几位(正整数是小数点向后计算n位, 负整数表示小数点向前计算n位) |
from decimal import Decimal
print(Decimal((1, (1, 5, 2), 0)))
print(Decimal((1, (1, 5, 2), 1)))
print(Decimal((0, (1, 5, 2), 1)))
print(Decimal((0, (1, 5, 2, 4), -2)))
输出:
-152
-1520
1520
15.24