1-1 Comparison: isValueEqualOrLess
Reference Page: Comparison Rules
Automatic Comparison Rules
Relationship: One-to-One / Rule: Is Value Equal Or Less
Definitions
Supported data types: String, Number, Date
Comparison of values of different data types always returns False.
Comparison of values of unsupported data types always returns False.
Data type: String
Strings are compared based on total length and encoding of each character.
Two strings are considered equal if they have equal length (same number of characters) AND all characters, compared one by one, were equal.
A string of shorter length is always considered lesser. Comparison of two strings is performed character by character up to the first character that differs. The string with the lesser character in that position is considered lesser.
Data type: Number
Numeric values are considered equal if there is no difference (near-zero-difference) between them (matters for floating point numbers with precision loss).
A lesser value is considered lesser than a bigger one. All negative numbers are less than zero and all positive numbers. Thus, -1 is less than 100; -100 is less than -1.
The floating-point value NaN
(not a number) is greater than any other numeric value and is equal to itself.
Data type: Date
Date/time values are compared per component values: Year, Month, Day, Hour, Second.
Two dates are considered equal if there is zero seconds difference between them.
A later date is considered greater than an earlier one. A date with a greater month but lesser year is considered less, and so forth.
Implementation
Public Function isValueEqualOrLess(ByVal sActualValue, ByVal sExpectedValue, ByVal sFormat) Dim intRC If Not isSameFormat(sActualValue, sExpectedValue, sFormat) Then isValueEqualOrLess = False Exit Function End If Select Case UCase(sFormat) Case "NUMBER" If CDbl(sActualValue) <= CDbl(sExpectedValue) Then isValueEqualOrLess = True Else isValueEqualOrLess = False End If Case "DATE" If DateDiff("s", CDate(sActualValue), CDate(sExpectedValue)) >= 0 Then isValueEqualOrLess = True Else isValueEqualOrLess = False End If Case "STRING" intRC = StrComp(sActualValue, sExpectedValue) If (intRC = 0) OR (intRC = -1) Then isValueEqualOrLess = True Else isValueEqualOrLess = False End If Case Else isValueEqualOrLess = False End Select End Function
Test Code
Log.Message("1-1 Comparison: isValueEqualOrLess") boolRC = isValueEqualOrLess(1, 1.0, "Number") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If boolRC = isValueEqualOrLess("1.0", "1", "String") If boolRC Then Log.Error("isValueEqualOrLess failed") End If boolRC = isValueEqualOrLess(1, 1.0, "Double") If boolRC Then Log.Error("isValueEqualOrLess failed") End If sValue1 = 1 sValue2 = 1+dblNearlyZero boolRC = isValueEqualOrLess(sValue1, sValue2, "Number") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If sValue1 = 1 sValue2 = 1+dblNearlyZero/10 boolRC = isValueEqualOrLess(sValue1, sValue2, "Number") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If sValue1 = CDate("01/01/01") sValue2 = CDate("01/01/2001") boolRC = isValueEqualOrLess(sValue1, sValue2, "DATE") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If sValue1 = CDate("01/01/01") sValue2 = CDate("1/1/2001") boolRC = isValueEqualOrLess(sValue1, sValue2, "DATE") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If boolRC = isValueEqualOrLess("aaaazzzz", "zzzzaaaa", "String") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If boolRC = isValueEqualOrLess("ab", "abc", "String") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If boolRC = isValueEqualOrLess("ab ", "abc", "String") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If boolRC = isValueEqualOrLess(0, 1, "Number") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If boolRC = isValueEqualOrLess(0, dblNearlyZero, "Number") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If boolRC = isValueEqualOrLess(-1, 0, "Number") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If boolRC = isValueEqualOrLess(-10, -1, "Number") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If sValue1 = CDate("01/01/01") sValue2 = CDate("1/1/2002") boolRC = isValueEqualOrLess(sValue1, sValue2, "DATE") If Not boolRC Then Log.Error("isValueEqualOrLess failed") End If sValue1 = CDate("31/12/2050") sValue2 = CDate("1/1/2050") boolRC = isValueEqualOrLess(sValue1, sValue2, "DATE") If boolRC Then Log.Error("isValueEqualOrLess failed") End If