ケタ数の検証 〜備忘録メモ〜
はじめに
AiAcademyで数学の勉強をしたときに、logと言われる関数を学んだので、備忘録として、Pythonのコードで書き残すことにしました。
文字列でケタ数を割り出す。
int型縛り
logについては2.で書かれているので、時間がない方は、目次で2.をクリックして、ページ内リンクから飛んでください。
ケース1 文字列でケタ数を割り出す
priceという変数に金額を入力します。金額ですので、int型に変換し、文字列に変換してから、ケタ数を割り出します。プログラミングでは、もっともスタンダードな方法です。
※len関数は配列の要素の数(すなわち文字列の数)を出す関数なので、str関数で文字列に変換しないと、エラーが出ます。
※マイナス(-)では、-も文字としてカウントされます。
price=int(input('金額を入力してください→'))
print('入力された金額:{0}円'.format(price))
print('{0}ケタの数字が入力されました。'.format(len(str(price))))
金額を入力してください→-300
入力された金額:-300円
4ケタの数字が入力されました。
ケース2 int型縛り
AiAcademyで数学の勉強したことのちょっとした応用。すなわち、int型のままでケタ数を取り出す方法です。そもそも、logは対数関数であり、log10は
「10の何乗なのか」
を示す関数です。ですので、+1すれば、ケタ数になるのですが、一つ注意しておきたいことがあります。
たとえば、13。こちらは
「10の何乗なのか」
を計算すると、小数点になってしまいますので、
int型で丸め、1を足すこと
でケタ数を割り出します。
※マイナスの数字ではlog10関数ではケタ数を割り出せないので、注意が必要です。どうしても取り出したい場合はpriceという変数に、絶対値を割り出すabs関数を挟んだ上で、計算するといいかもです。
import math
price=int(input('金額を入力してください→'))
print('入力された金額:{0}円'.format(price))
#なぜlog10か?10のケタの数を求めたいから。そもそも対数は何乗なのかを表すものだから、1-10の間の答えは小数点となってしまう。なので、int型で丸め1を足すとケタ数となる。
#これでstr型に変換することなく、ケタの数を求めることは可能。
print('{0}ケタの数字が入力されました。'.format(int(math.log10(abs(price))+1)))
#文字列で取り出し、int型に格納する。
金額を入力してください→-300
入力された金額:-300円
3ケタの数字が入力されました。
補足
log10は常用対数といって、
桁をもとめるための公式
でも使われます。
厳密的には桁数を求めるための公式にのっとって検証するのが正確に割り出せるかもしれませんね。そう考えると、桁をもとめるための公式を使ってif文で検証した上で、int型で丸めて1を足すのは理にかなっているのかもしれません。
数学って奥が深いなとあらためて感じました。
google colabにソースコードを乗っけてます↓