全部学习汇总: GitHub - GreyZhang/python_basic: My learning notes about python.
欢迎路过的YUAN类朋友们,希望我们能够相互交流共同成长。如有错误或者不足希望及时指点指出,不胜感激!以下是我的联系方式:
类C的程序语言中进行有余数的除法并不是很难,其实两步就能够做到。一步是常用的除法取整,第二步是通过除法运算后取余。在MATLAB中有直接的分数运算,说起来算是更加高级一步。其实,在Python的内置函数中也有能够一步到位得出商和余数两个数值的内置函数。至于分数运算,暂时确实是还没有找到。
内置函数中的divmod可以实现两个数相处取出商和余数的功能。函数不仅支持整形,而且支持浮点数。不过,在手册中明确说明了不适用于复数的运算。
尝试进行以下计算:
>>> divmod(17.5,4.3)
(4.0, 0.3000000000000007)
>>> divmod(123,34)
(3, 21)
>>> divmod(456.6,7)
(65.0, 1.6000000000000227)
>>> divmod(6,1.2)
(5.0, 2.220446049250313e-16)
通过以上计算可以发现一个很有意思的现象,在最后一个计算中这个应该是能够整除的但是却出现了一个余数,只是余数非常小。在Python 2,X中,涉及浮点数的运算时有时候Python会计算的尽量精确一些然后出现这种表面上看着比较费解的现象。另外一个例子,可以计算9个0.1相加的结果。如下:
>>> num = .1 + .1 + .1 + .1 + .1 + .1 + .1 + .1 + .1
>>> num
0.8999999999999999
>>> print(num)
0.9
>>>
关于这种让人理解起来有些糊涂的现象,在Python 3中进行了修改。曾经针对这种现象也找来了最新的Python 3进行验证。不过当时得出的结论是,Python 3统一了曾经有的差异,但是计算的结果在追求计算机内部精准的时候跟我们正常思维的数据上相比还是有一定的差异。
关于这些,似乎有些吹毛求疵了,毕竟是浮点数的运算。如果换成60除以12一切肯定进行的顺顺利利毫不拖泥带水。
















