文字列数式評価(4)~項内の乗除算

'   項の中(の乗除算)の計算
Private Function XEval_MD(ByVal s)

    On Error Goto Err:

    Set XEval_ = New Triple

    Dim i               As Long         '   繰り返し変数

    '   "/" を "*/" に変換し、"*" で分解
    s = Split(Replace(s, "/", "*/"), "*")
   
    XEval_MD = CDec(1)
    For i = 0 To UBound(s)
        '   除算を乗算に変換
        If Left(s(i), 1) = "/" Then
            '   除数が 0 ならばエラーを返す
            If Mid(s(i), 2) = 0 Then
                Err.Raise 9000, , "ゼロ除算が発生しました"
                Exit Function
            End If
                XEval_MD = XEVal_MD / Mid(s(i), 2)
        Else
            XEval_MD = XEval_MD * s(i)
        End If
    Next

    Exit Function

Err:
    Err.Raise 9002, , s(i) & "を数値として処理できませんでした"

End Function

s(i)はSplitから生成される文字列だが、
計算過程で倍精度に変換されないように注意をする。

※ 精度維持のため、除算は除算のまま処理する。

コメント

このブログの人気の投稿

文字列数式評価(5)~各項の和

文字列数式評価(3)~符号処理

文字列数式評価(1)