Python浮点数(小数)

1,327次阅读
没有评论
Python浮点数(小数)

Python浮点数(小数)

浮点数简单来说就是实数,也叫小数,不同于整数,其带有小数部分。浮点数广泛用于统计和计算上。

现实生活中,我们经常说的一个半小时,其应该用 1.5 个小时来表示。所有浮点数自然存在于生活中,并且广泛存在生活中。

所有的浮点数都是近似的。

>>> 1.2 * 6
7.199999999999999
>>> 1.2 * 6 == 7.2  # 它们居然不相等
False

所以比较两个浮点数是否相等需要用 abs(a-b)<1e-5 来判断。

>>> a = 1.2 * 6
>>> abs(a-7.2) < 1e-5
True

至于为何浮点数不同于整数,其值可以认为都是近似值呢?这与采用的进制有关。如在十进制中,三分之一(1/3)就是无法准确表示的,只能近似等于 0.333333。但是这个数在三进制中就可以准确表示为 0.1。同样的情况也发生在二进制中,如十进制中的 0.1 在二进制中就不能准确表示。

下面以浮点数 10.5 为例介绍浮点数的表示法。浮点数一般分为两部分,整数部分和小数部分。整数部分的表示法和整数的二进制表示法相同,如 10 用二进制数表示就是 1010。

10 = 8+2 = 23+21 = 0b1010

小数部分每位的权重依次是 2−1、2−2、2−3、2−4,所以 0.5 就可以表示为 0.1。

所以 10.5 用二进制数表示为 0b1010.1 = 0b1.0101*23。这就是标准的浮点数表示法,其包括数值部分 0b1.0101 和指数 3。数值部分大于或等于 1 而且小于 2。

如果用十六进制表示就是:

0b1.0101*23 =0x1.5*23

但是我们也不需要每个数都这么来手工计算,Python 提供了函数 hex(),它是浮点数对象的成员函数。下面演示其用法。

>>> 10.5.hex()          # 得到其内部表示法
'0x1.5000000000000p+3'  # 数值部分是0x1.5,指数部分是3

浮点数的基本运算

本节继续介绍浮点数的基本运算,包括加减乘除和幂运算。

1) 加减乘除运算(+-*/)

和整数一样,浮点数也支持加减乘除等基本运算,运算符号也相同。

>>> 1.2 + 1.3        # 加法运算
2.5
>>> 1.2 - 2.3        # 减法运算
-1.0999999999999999  # 得到一个近似值
>>> 1.2 * 2.0        # 乘法运算
2.4
>>> 1.2 / 2.0        # 除法运算
0.6

2) 幂运算(**)

浮点数也支持幂运算,符号也是 **。但是负数不支持小数幂的运算。

>>> 1.2 ** 2
1.44
>>> 1.2 ** 2.3
1.5209567545525315
>>> -1.2 ** 2                       # 等效于-(1.2 ** 2)
-1.44
>>> (-1.2) ** 2                     # 负数的平方为正数
1.44
>>> (-1.2) ** 2.1                   # 负数不支持小数幂运算
Traceback (most recent call last):  # 抛出异常
  File "<stdin>", line 1, in <module>
    ValueError: negative number cannot be raised to a fractional power

浮点数的其他运算

1) 将浮点数转换成近似的两个整数的商——as_integer_ratio()

这是一个浮点数的成员函数。其用法如下:

>>> a = 0.1                                 # 操作数
>>> a.as_integer_ratio()
(3602879701896397, 36028797018963968)
>>> 3602879701896397.0 / 36028797018963968  # 两者的值很接近了
0.1

2) 判断某个浮点数是否为整数——is_integer()

这是浮点数对象自带的函数,判断某个浮点数是否为一个整数。其用法如下:

>>> a = 12.0
>>> a.is_integer()
True
>>> a = 12.0001
>>> a.is_integer()
False

当然这也是一个近似值,如 1.0000000000000001 就被看做 1。下面演示了这种情况。

>>> 1.0000000000000001.is_integer()  # 判断是否可以当作整数使用
True
>>> 1.0000000000000001 == 1.0
True
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试
1

相关文章:

版权声明:[db:作者]2022-09-19发表,共计1668字。
新手QQ群:570568346,欢迎进群讨论 Python51学习