Python

【Python】桁数の取得

この記事では、Pythonで数値の桁数を取得する方法を解説します。

int型の桁数の取得

int型の桁数を取得したい場合は、一度文字列に変換してからlen()関数で長さを測ることで取得できる。その際、abs()関数を使って絶対値にしておく。

絶対値に変換しておかないと負の数だった場合に、マイナス(-)まで長さに含まれてしまう。

i = 1234
i_abs = abs(i)

print(len(str(i)))

実行結果

4

float型の桁数の取得

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型の桁数の取得

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)
最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』