Python整数除法为什么是精确的?-满久琦的个人网站

Python整数除法为什么是精确的?

3 人参与

大家用Python做数学运算的时候,有没有发现一个挺有意思的现象?整数除法算出来的结果总是精确的,不会出现那些让人头疼的小数点问题。这跟咱们平时用计算器算数可不太一样。

这事儿得从计算机的”数学基因”说起

计算机天生就是个二进制生物,它处理整数就跟咱们数数一样自然。在Python里,整数是以完整的二进制形式存储的,不像浮点数那样需要拆分成指数和尾数。这就好比咱们用完整的硬币买东西,一块就是一块,五毛就是五毛,不会出现半个硬币的情况。

Python的两种除法

其实Python很贴心,给了咱们两种除法选择。用/符号的话,就算两个整数相除,结果也会自动变成浮点数。比如10/3会得到3.3333333333333335,这里面就带了些许误差。

>>> 10 / 3
3.3333333333333335

但要是用//这个地板除符号,那情况就完全不同了。它会把结果的小数部分直接砍掉,只留下整数部分。就像把一块蛋糕平均分给几个人,最后剩下的不够分的那部分就直接忽略不计。

整数除法的”老实”特性

//做整数除法时,Python从来不会耍小聪明。它严格按照整数运算的规则来,说给你整数就给你整数,不会偷偷在后面加小数点。这种”说到做到”的特性,在编程里特别让人放心。

  • 10 // 3 = 3
  • 9 // 3 = 3
  • 8 // 3 = 2

看到没?不管能不能整除,结果都是整数。这种确定性在写代码的时候特别重要,你永远知道会得到什么。

为什么非要这么精确?

想象一下,如果你在写一个分糖果的程序,总共有10颗糖要分给3个小朋友。用10//3得到3,这意味着每个小朋友能分到3颗糖,剩下的1颗就留在那里。这种场景下,精确的整数结果就特别实用。

其实Python设计者考虑得很周到。他们知道在某些场景下,我们需要确切的整数结果,而不是近似值。比如统计人数、计算页数、分配资源这些情况,小数根本没用,要的就是实实在在的整数。

下次你写代码需要做除法的时候,不妨想想:我要的是精确的整数,还是带小数点的近似值?想明白了这个问题,就知道该用//还是/了。

参与讨论

3 条评论

延伸阅读