如何检查Excel范围内的隐藏数字精度?

时间:2016-01-20 21:39:52

标签: excel vba excel-vba

我正在比较两个这样的范围:

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时给出的精度,而不是“真实”浮点值?

编辑:对不起,忘了提这个检查也用来比较字符串。

2 个答案:

答案 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)