Private Sub estMathOperationCoercionVerify()
' Illustrate the type of value returned from the built-in mathematical operations depending upon
' the types of the arguments. Using the CoerceToType function seems to cause some of the built-in
' operators to promote the arguments differently, at least in the case of exponentiation.
'See also:
' FixUps Class
' ConvertValues Class
' MathReals Class
Dim astrOp() As String
ReDim astrOp(1 To 5)
astrOp(1) = "+"
astrOp(2) = "-"
astrOp(3) = "*"
astrOp(4) = "/"
astrOp(5) = "^"
Dim aintVT() As Variant
ReDim aintVT(1 To 6)
aintVT(1) = vbInteger
aintVT(2) = vbDate
aintVT(3) = vbDouble
aintVT(4) = vbLong
aintVT(5) = vbSingle
aintVT(6) = vbCurrency
Dim intOp As Integer
For intOp = LBound(astrOp) To UBound(astrOp)
Dim intTypeOne As Integer
For intTypeOne = LBound(aintVT) To UBound(aintVT)
Dim intTypeTwo As Integer
For intTypeTwo = LBound(aintVT) To UBound(aintVT)
Dim strExpr As String
Dim varRtn As Variant
strExpr = "CoerceToType(1, " & aintVT(intTypeOne) & ") " & astrOp(intOp) & " CoerceToType(1, " & aintVT(intTypeTwo) & ")"
Debug.Print VarTypeToString(aintVT(intTypeOne)) & " " & astrOp(intOp) & " " & VarTypeToString(aintVT(intTypeTwo)) & " = ";
On Error Resume Next
varRtn = estEvalWrap(strExpr)
If Err Then
Debug.Print "(Error #" & Err & ": " & Error$ & ")";
Else
Debug.Print VarTypeToString(VarType(varRtn));
End If
On Error GoTo 0
Debug.Print
Next intTypeTwo
Next intTypeOne
Next intOp
End SubCopyright 1996-1999 Entisoft
Entisoft Tools is a trademark of Entisoft.