文字列数式評価(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から生成される文字列だが、
計算過程で倍精度に変換されないように注意をする。
※ 精度維持のため、除算は除算のまま処理する。
コメント
コメントを投稿