为了丰富学员们的课外知识,老师让我们助理分享这套Python系列教程。由于Python教程并非老师所写,所以不如老师的AI教学风趣幽默,望大家见谅!想要学习AI技术的新朋友可以去www.captainbed.net。本公众号由助理负责运营,只免费分享课外知识,不回复任何私信。PS:看不懂本篇文章的同学请从前面的文章看起,循序渐进每天学一点就不会觉得难了!


不知道你遇到过下面这种怪现象没有,同样的表达式却有不同的显示结果。下面第一个是交互提示模式下的自动回显,第二个是打印语句显示:

>>> b / (2.0 + a)         # Auto echo output: more digits

0.80000000000000004

>>> print(b / (2.0 + a))  # print rounds off digits

0.8

在这个奇怪结果背后的真正原因是浮点数的硬件限制,以及它无法精确地表现一些值。因为计算机架构不是本教程能够涵盖的,所以,我们将简要解释成第一个输出是实际存储在计算机的浮点数硬件中的,仅仅是你不习惯看它们而已。如果你不想看到所有的位数,就使用print。

注意,尽管这样,并不是所有的值都有这么多的数字位数需要显示:

>>> 1 / 2.0

0.5

并且除了打印和自动回显之外,还有很多种方法显示计算机中的数字的位数:

>>> num = 1 / 3.0

>>> num                    # Echoes

0.33333333333333331

>>> print(num)             # print rounds

0.333333333333

>>> '%e' % num             # String formatting expression

'3.333333e-001'

>>> '%4.2f' % num          # Alternative floating-point format

'0.33'

>>> '{0:4.2f}'.format(num) # String formatting method (Python 2.6 and 3.0)

'0.33'

这些方法中的最后三个使用了字符串格式化,这是灵活地进行格式化的一种工具,我们将会在以后的文章中介绍它。