LoginSignup
21
5

Python3の割り算は常にfloatで返る

Last updated at Posted at 2018-08-12

チラ裏なので1分で読めます

スクリーンショット 2018-08-12 12.34.32.png
図:予想外の挙動を見せる割り箸

いったい何です

(int型)÷(int型)=(?型)

Python2→int型(切り捨て)
Python3→float型(型が変化)

マジか〜〜〜

Python2系での割り算

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型同士の割り算

Python3
>>> 12/5
2.4
>>> type(12/5)
<class 'float'>

>>> 10/5
2.0
>>> type(10/5)
<class 'float'>

割り算の結果は全てfloat型で返ります。
四則演算の挙動が違う、驚愕の仕様でございます。

おまけ

Python3でも/の代わりに//を使用することで、小数点以下切り捨ての除算(商の計算)ができます。

Python3
>>> 12//5
2
>>> type(12//5)
<class 'int'>

ただし
//を使用するとfloat型同士の計算でも切り捨ててしまうので、一括で置換する際は注意が必要です。
(型はfloatなのに切り捨ててるので尚のこと注意)

Python3
>>> 12.0//5.0
2.0
>>> type(12.0//5.0)
<class 'float'>

以上、メモでした。


追記

数年越しに加筆修正してて気付いたのですが、Python3のほうが出力の型が統一されてる上に情報の欠損少なくて良い気がしますね
intで切り捨てしたいとき(商を求めたいとき)はresult = int(int_a / int_b)とかmath.floor()でキャストしてあげればいいだけですし
(マイナスの場合結果が異なるのでご注意を)

組み込み関数のdivmod()という手もありますね

執筆時は「勝手に変換すんなよー!」とか思って書いた気がします、青いですね

21
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
5