JSONを受け入れるとき、Floatで指定していたら整数で投げても.0
がついてしまって、Integerで欲しいのにFloatになってしまう。なので、Floatが整数かどうかを判定して、整数ならInt型に、そうでないならFloat型のままにする方法を調べた。
汚い方法
Stringにして後ろ2文字が.0
なら、整数としてみた。
num = 46.0
if str(num)[-2:] == '.0':
num = int(num)
汚いので、別の方法を検討。
たぶんまっとうな方法
a = 10
でb = 10.0
のとき、a == int(b)
はtrue
になることを利用した。
num = 46.0
if num == int(num):
num = int(num)
なるほど。
一行で書こうぜ
num = int(num) if num == int(num) else num
オブジェクトに聞いてみよう
@shiracamus 様、コメントありがとうございます!
num = int(num) if num.is_integer() else num
ちなみに・・・
a = 10
とb = 10.0
を比較して、false
にしたいときは、、、
a == b # true
a is b # false