如何检查Excel范围内隐藏的数字精度?
我比较这样的两个范围:
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
时给出的精度,而不是“真正的”浮点值?
编辑:对不起,忘了提及这个检查也用于比较string。
尝试这个:
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)
我不确定我是否可以复制这个问题,这对我来说可能是你的价值观不是你认为的价值观,但是我不会那么重视。 您可以考虑强制转换为string,并将这些值进行等同比较:
?Cstr(Cell1.Value) = Cstr(Cell2.Value)