チラ裏なので1分で読めます
いったい何です
python2
(int型)÷(int型)=(int型)
python3
(int型)÷(int型)=(float型)
型が異なります、マジか〜〜〜
Python2系での割り算
>>> 12/5
2
>>> type(12/5)
<type 'int'>
>>> 12.0/5
2.4
>>> type(12.0/5)
<type 'float'>
とまあ,一般的というか、int型同士の除算は小数点以下切り捨て、出力は商になります。
型もintです。
(どちらか一方でもfloat型だった場合、float型で返ります)
Python3系での割り算
対してPython3でのint型同士の割り算
>>> 12/5
2.4
>>> type(12/5)
<class 'float'>
>>> 10/5
2.0
>>> type(10/5)
<class 'float'>
割り算の結果は全てfloat型で返ります。
四則演算の挙動が違う、驚愕の仕様でございます。
おまけ
Python3でも/
の代わりに//
を使用することで、小数点以下切り捨ての除算(商の計算)ができます。
>>> 12//5
2
>>> type(12//5)
<class 'int'>
ただし
//
を使用するとfloat型同士の計算でも切り捨ててしまうので、一括で置換する際は注意が必要です。
(型はfloatなのに切り捨ててるので尚のこと注意)
>>> 12.0//5.0
2.0
>>> type(12.0//5.0)
<class 'float'>
以上、メモでした。
追記
数年越しに加筆修正してて気付いたのですが、Python3のほうが出力の型が統一されてる上に情報の欠損少なくて良い気がしますね
intで切り捨てしたいとき(商を求めたいとき)はresult = int(int_a / int_b)
とかmath.floor()
でキャストしてあげればいいだけですし
(マイナスの場合結果が異なるのでご注意を)
組み込み関数のdivmod()
という手もありますね
執筆時は「勝手に変換すんなよー!」とか思って書いた気がします、青いですね