Categories: Python

【Python】数値の桁数を取得する方法を解説

この記事では、Pythonでint型やfloat型などの桁数を取得する方法を解説します。

int型の桁数の取得

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

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)
ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

5か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago