我正在比较两个这样的范围:
Set cell1 = SampleFeature.Cells(row, column)
Set cell2 = TestFeature.Cells(row, column)
If cell1.value <> cell2.value Then
DoSomething()
End If
我有两个范围,在即时窗口中显示这些值:
?cell1.Value
0.45
?cell2.Value
0.45
?cell1.Value=cell2.Value
False
?cell1-cell2
-5.55111512312578E-17
所以这显然是一个浮点精度问题。我的问题是,如何更改cell1.value <> cell2.value
比较,以便它使用输出cell1.value
时给出的精度,而不是“真实”浮点值?
答案 0 :(得分:1)
试试这个:
Sub Test()
Dim Rng1 As Range, Rng2 As Range
Set Rng1 = Range("A1") ' just for test example
Set Rng2 = Range("A2") ' just for test example
'Rng1.Value = 0.45 ' just for test example
'Rng2.Value = 0.45 - 5.55111512312578E-17 ' just for test example
cell1 = Rng1.Value
cell2 = Rng2.Value
If IsNumeric(cell1) Then cell1 = Val(cell1)
If IsNumeric(cell2) Then cell2 = Val(cell2)
Debug.Print cell1 = cell2
Debug.Print cell1 - cell2 ' if both are numbers
Exit Sub
我们也可以使用CDbl(CStr(cell1))
代替Val(cell1)
答案 1 :(得分:0)
我不确定我是否可以复制这个问题,这对我来说可能是你的价值观不是你认为的那些价值,但我不知道这一点。您可以考虑转换为字符串并比较这些值的等效性:
?Cstr(Cell1.Value) = Cstr(Cell2.Value)