Pythonで数値の桁数、任意の桁(位)の値を取得

Pythonで数値(整数int、浮動小数点数float)の桁数や、任意の桁(位: 一の位や千の位など)の値を取得する方法を説明します。

整数intの場合 浮動小数点数floatの場合

計算で求める方法もあるが、ここでは文字列strに変換する方法を使います。

整数intの場合

文字列に変換 以下の整数intを例とします。

i = 9876

print(i)
# 9876

print(type(i))
# <class 'int'>

整数intはstr()で文字列に変換できます。

s = str(i)

print(s)
# 9876

print(type(s))
# <class 'str'>

桁数を取得 数値の桁数は変換した文字列の文字数に等しい。文字数はlen()で整数intとして取得できます。

print(len(s))
# 4

print(type(len(s)))
# <class 'int'>

str()とlen()を一気に書いても問題ありません。

print(len(str(i)))
# 4

任意の桁(位)の値を取得 文字列の任意の位置の値はインデックス[]で取得できます。 インデックスに負の値を指定すると後ろ(右側)から位置を選択できます。たとえば、一の位は一番後ろ(右側)なので[-1]。十の位、百の位…が[-2], [-3]...となります。

print(s[-1])
# 6

print(s[-3])
# 8

存在しない位置を指定するとエラーとなるので気をつけてください。

# print(s[-10])
# IndexError: string index out of range

文字列をインデックスで指定して取得できるのは文字列。整数intに変換したい場合はint()を使います。

print(type(s[-1]))
# <class 'str'>

print(int(s[-1]))
# 6

これもまとめて記述できます。print()での出力は同じだがint()のありなしで型が異なるので気をつけてください。

print(str(i)[-1])
# 6

print(int(str(i)[-1]))
# 6

桁区切りありの文字列の場合 3桁ごとにカンマで区切られた数字の文字列の桁数や任意の桁(位)の値を取得したい場合、文字列のreplace()メソッドでカンマ,を空文字列''に置換して削除すればOKです。

s = '9,675'

print(s.replace(',', ''))
# 9675

print(type(s.replace(',', '')))
# <class 'str'>

あとはこれまでの例と同じ。桁数はlen()、任意の桁(位)の値はインデックス[]で取得できます。

print(len(s.replace(',', '')))
# 4

print(s.replace(',', '')[-3])
# 6

浮動小数点数floatの場合

文字列に変換 以下の浮動小数点数floatを例とします。

f = 987.6543

print(f)
# 987.6543

print(type(f))
# <class 'float'>

浮動小数点数floatもstr()で文字列に変換できます。

s = str(f)

print(s)
# 987.6543

print(type(s))
# <class 'str'>

小数点で分割 文字列のsplit()メソッドで任意の文字で分割できます。ここでは小数点.で整数部と小数部に分割します。分割された文字列のリストが返されます。

print(s.split('.'))
# ['987', '6543']

print(type(s.split('.')))
# <class 'list'>

print(type(s.split('.')[0]))
# <class 'str'>

以下のようにそれぞれ別々の変数に格納できます。

s_i, s_d = s.split('.')

print(s_i)
# 987

print(s_d)
# 6543

桁数を取得 整数intの場合と同じ。整数部と小数部それぞれの桁数をlen()で取得できます。

print(len(s_i))
# 3

print(len(s_d))
# 4

文字列への変換および小数点での分割とまとめて書くと以下のようになります。

print(len(str(f).split('.')[0]))
# 3

print(len(str(f).split('.')[1]))
# 4

任意の桁(位)の値を取得 整数intの場合と同じ。任意の位置の値はインデックス[]で取得します。 小数部については小数点第一位、第二位、第三位...が[0], [1], [2]に相当します。

print(s_i[-1])
# 7

print(s_i[-3])
# 9

print(s_d[0])
# 6

print(s_d[3])
# 3

取得できるのは文字列なので、整数intに変換したい場合はint()を使います。

print(s_d[3])
# 3

print(type(s_d[3]))
# <class 'str'>

print(int(s_d[3]))
# 3

print(type(int(s_d[3])))
# <class 'int'>

文字列への変換および小数点での分割とまとめて書くと以下のようになります。print()での出力は同じだがint()のありなしで型が異なるので気をつけてください。

print(str(f).split('.')[0][-3])
# 9

print(int(str(f).split('.')[0][-3]))
# 9

print(str(f).split('.')[1][3])
# 3

print(int(str(f).split('.')[1][3]))
# 3
Last Updated: 6/26/2019, 10:34:03 PM