C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

小数点以下の桁数を取得する

VBAです。

ちょっと検索したのですが、小数点以下の桁数を取得する簡単な方法が
あるのかどうかイマイチ分かりませんでした。
目的はRoundさせる際の引数として渡したいだけなのですが・・・。
(Roundで良いのかどうかは別のお話ですが、今回はRoundで)

結果的に自作関数になりますが、思い付いた処理は数値を文字列と
して変換し、小数点位置から判断させました。

'vba
Option Explicit

Sub CATMain()

    Dim numbers As Variant
    numbers = Array( _
        1, _
        0.1, _
        0.01, _
        0.001, _
        0.0001 _
    )

    Dim i As Long
    Dim decimalPlaces As Long
    
    For i = 0 To UBound(numbers)
        decimalPlaces = get_decimal_places(numbers(i))
        Debug.Print numbers(i) & " : " & decimalPlaces
    Next

End Sub


'小数点以下の桁数取得
Private Function get_decimal_places( _
    ByVal number As Double) _
    As Long
    
    Dim numStr As String
    numStr = str(number)
    
    Dim decimalPoint As Long
    decimalPoint = InStr(numStr, ".")

    If decimalPoint < 1 Then
        get_decimal_places = 0
    Else
        get_decimal_places = Len(numStr) - decimalPoint
    End If

End Function

結果はこんな感じです。

1 : 0
0.1 : 1
0.01 : 2
0.001 : 3
0.0001 : 4

左が与えられた数値で、右が桁数です。
これで十分じゃないかな。