ステートメント制御文の使用例4


使用例4

1より大きい正の数ではその桁数を算出し、1より小さい正の数では
小数点以下第何位に 0 以外の数が初めて現れるかを算出する。


     
Sub Keta_num() Dim n As Variant n = InputBox(Title:="桁数", prompt:="正の数を入力せよ") If n < 0 Or IsNumeric(n) = False Then MsgBox "正の数!", 16 Exit Sub End If Select Case n Case Is >= 1 MsgBox Title:="桁数", _ prompt:=n & " は " & Keta(n) & " 桁の数" Case Is < 1 MsgBox Title:="桁数", _ prompt:=n & " は小数第 " & Keta(n) & " 位" _ & Chr(13) & "に 初めて 0 以外の数" End Select End Sub Function Keta(num As Variant) As Integer Select Case num Case Is >= 1 Keta = Int(Log(num) / Log(10#)) + 1 Case Is < 1 Keta = (-1) * Int(Log(num) / Log(10#)) End Select End Function ' 10^(k-1) < n < 10^k の時、n は k 桁 ' この時、両辺の常用対数を考えると ' Log(10^(k-1)) < Log(n) < Log(10^k) ' よって、k-1 < Log(n) < k ' つまり、k = Int(Log(n)) + 1 ' 自然対数で書き換えると、k = Int(Log(n) / Log(10)) + 1 ' 同様に、10^(-k) < n <10^(-(k-1)) の時、n は ' 小数第 k 位に初めて 0 以外の数字がくる ' 上記と同様に考えて、k = -Int((Log(n) / Log(10)) となる back top