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()
を一気に書いてもOK。
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()
メソッドでカンマ,
を空文字列''
に置換して削除すればよい。
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