この記事では、Pythonでint型やfloat型などの桁数を取得する方法を解説します。
int
型の桁数を取得したい場合は、一度文字列に変換してからlen()
関数で長さを測ることで取得できる。その際、abs()
関数を使って絶対値にしておくことでマイナス(-)を排除しておく。
i = 1234
i_abs = abs(i)
print(len(str(i_abs)))
実行結果
4
文字列に変換することでインデックスを指定して任意の桁の値を取得することができる。
i = 1234
i_str = str(abs(i))
# 一の位
print(i_str[-1])
# 十の位
print(i_str[-2])
# 百の位
print(i_str[-3])
# 千の位
print(i_str[-4])
実行結果
4
3
2
1
float
型もint
型と同様の方法で桁数を取得可能だが、小数点も長さに含まれる点に注意してください。
f = 3.14
f_abs = abs(f)
print(len(str(f_abs)))
実行結果
4
整数部と小数部の桁数をそれぞれ取得したい場合は、文字列に変換してからsplit()
関数を使って小数点で分割する。
f = 3.14
f_abs = abs(f)
# 小数点で分割
f_l = str(f_abs).split('.')
print(f_l)
# それぞれ取得できる
print(f'整数部: {len(f_l[0])}')
print(f'小数部: {len(f_l[1])}')
実行結果
['3', '14']
整数部: 1
小数部: 2
int
型とfloat
型の桁数を取得するには、数値を文字列に変換して一文字ずつisdigit()
メソッドを使って数字か調べ、その結果の総和をsum()
関数で求めることで桁数を測ることができます。
num = 3.1415
# 文字列に変換
num_str = str(num)
# 数値かどうかのリスト
num_isdigit = [c.isdigit() for c in num_str]
print(list(num_isdigit))
# 総和
print(sum(num_isdigit))
実行結果
[True, False, True, True, True, True]
5
もっとコンパクトに記述することも可能。
num = 3.1415
print(sum(c.isdigit() for c in str(num)))
実行結果
5
float
型の場合、桁数が大きいと指数表記されてしまう。
f = 0.00001234
print(f)
実行結果
1.234e-05
指数表記されている場合、仮数部の桁数と指数部を足すことで桁数を求めることができる。
f = 0.00001234
f_str = str(abs(f))
# 指数表記されているかどうか
if f_str[-4] == 'e':
# 指数部の取得
e = int(f_str[-2:])
# 仮数部の桁数の取得
m = f_str.index('e') - 1
print(e + m)
else:
print(sum(c.isdigit() for c in f_str))
実行結果
9
関数にすると以下のような感じ。
def digits_length(num):
num_str = str(abs(num))
if num_str[-4] == 'e':
e = int(num_str[-2:])
m = num_str.index('e') - 1
return e + m
else:
return sum(c.isdigit() for c in num_str)