ステートメント制御文の使用例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