note.nkmk.me

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

Date: 2019-01-21 / tags: Python

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

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

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

スポンサーリンク

整数intの場合

文字列に変換

以下の整数intを例とする。

i = 9876

print(i)
# 9876

print(type(i))
# <class 'int'>
source: digit_int.py

整数intstr()で文字列に変換できる。

s = str(i)

print(s)
# 9876

print(type(s))
# <class 'str'>
source: digit_int.py

桁数を取得

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

print(len(s))
# 4

print(type(len(s)))
# <class 'int'>
source: digit_int.py

str()len()を一気に書いてもOK。

print(len(str(i)))
# 4
source: digit_int.py

任意の桁(位)の値を取得

文字列の任意の位置の値はインデックス[]で取得できる。

インデックスに負の値を指定すると後ろ(右側)から位置を選択可能。たとえば、一の位は一番後ろ(右側)なので[-1]。十の位、百の位…が[-2], [-3]...となる。

print(s[-1])
# 6

print(s[-3])
# 8
source: digit_int.py

存在しない位置を指定するとエラーとなるので注意。

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

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

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

print(int(s[-1]))
# 6
source: digit_int.py

これもまとめて記述可能。print()での出力は同じだがint()のありなしで型が異なるので注意。

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

print(int(str(i)[-1]))
# 6
source: digit_int.py

桁区切りありの文字列の場合

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

s = '9,675'

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

print(type(s.replace(',', '')))
# <class 'str'>
source: digit_int.py

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

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

print(s.replace(',', '')[-3])
# 6
source: digit_int.py

浮動小数点数floatの場合

文字列に変換

以下の浮動小数点数floatを例とする。

f = 987.6543

print(f)
# 987.6543

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

浮動小数点数floatstr()で文字列に変換できる。

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
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事