Pythonで数値の桁数を求めるときは…math.log10関数を使うことも一つの方法です。
10→1、100→2、1000→3となるので、1を足せば桁数が求まります。
もくじ
math.log10()を使って数値の桁数を求める方法
from math import *
x = 1000
log10(x)
# 3.0
##桁数を求めるなら...
x = 1000
int(log10(x)) + 1
# 4
x = 9999
int(log10(x)) + 1
# 4
よく使う対数はlog10, log2
よく使う対数はlog10、log2あたりでしょう。
理解としては累乗の逆ということになります。
log10(x)は「数値(x)が10の何乗(n)になっているか」
数値(x) | 10の何乗(n) |
---|---|
10 | 1 |
100 | 2 |
1000 | 3 |
10000 | 4 |
20000 | 4.301029995663981 |
log2(x)は「数値(x)が2の何乗(n)になっているか」
数値(x) | 2の何乗(n) |
---|---|
2 | 1 |
4 | 2 |
8 | 3 |
16 | 4 |
20 | 4.321928094887363 |
math.log10の逆は10**n
累乗の計算には**を使います。
10のn乗から数値xを求める計算式は、10**n=x です。10**2=100、10**3=1000になります。
n = 3
10**n
# 1000
##桁数から求めるなら...
n = 4
10**(n-1)
# 1000
対数の使いどころ
log(常用対数)は高校数学Ⅱで習います。
尺度が大きく違うものを足したり引いたりして比較することにも使われます。
例えば、都会の小学校と田舎の小学校を比較したいとき…
環境があまりにも違うため「どっちがいいとは一概に言えない」ことになります。
項目 | 都会 | 田舎 |
---|---|---|
生徒数 | 1000人 | 10人 |
教員数 | 32人 | 4人 |
敷地面積 | 8192㎡ | 32768㎡ |
駅徒歩 | 4分 | 16分 |
合計 | 9228 | 32798 |
数値を単に合計して比較すると、敷地面積の広い田舎の学校が圧倒的に勝ってしまいます。
各項目の単位がすべて違うので、比較の根拠も見えてきません。
これを対数を使って「学校力指数」として比較してみます。
項目 | 都会 | 田舎 |
---|---|---|
生徒数 | log10(1000)=3 | log10(10)=1 |
教員数 | log2(32)=5 | log2(4)=2 |
敷地面積 | log2(8192)=13 | log2(32768)=15 |
駅徒歩 | -log2(4)=-2 | -log2(16)=-4 |
合計 | 19 | 14 |
桁違いの生徒数は学校力として考慮しない…とする場合は、log10(x)を使って桁を取っ払います。
駅徒歩のようなデメリットはマイナスを付けて指数化してみます。
学校力の目安として比較できる数値になりました。
この比較における項目の重み付けでは、都会の小学校の学校力が上回る結果になりました。