当前位置:  开发笔记 > 后端 > 正文

比较VBA精度问题的双重性

如何解决《比较VBA精度问题的双重性》经验,为你挑选了4个好方法。

我无法在Excel VBA中比较2个双倍

假设我有以下代码

Dim a as double
Dim b as double
a = 0.15
b = 0.01

在对b进行一些操作之后,b现在等于0.6

然而,与双数据类型相关的不精确让我很头疼,因为

if a = b then
 //this will never trigger
end if

你知道我怎么能删除双重类型的尾随不精确?



1> Rob Walker..:

您无法比较浮点值是否相等.有关如何处理内部错误的讨论,请参阅本文" 比较浮点数 ".

它不像比较恒定的误差范围那么简单,除非你事先知道浮点数的绝对范围.



2> Anonymous Ty..:

如果你要这样做....

Dim a as double  
 Dim b as double  
 a = 0.15  
 b = 0.01

你需要在你的IF语句中添加圆函数,就像这样......

  If Round(a,2) = Round(b,2) Then   
     //code inside block will now trigger.
  End If  

另请参阅此处以获取其他Microsoft参考.



3> Toon Krijthe..:

比较平等的双打是不明智的.

某些十进制值映射到多个浮点表示.因此,一个0.6并不总是等于另一个0.6.

如果我们从另一个中减去一个,我们可能得到类似于0.00000000051的东西.

我们现在可以将等式定义为具有小于某个误差容限的差异.



4> 小智..:

这是我写的一个简单的函数:

Function dblCheckTheSame(number1 As Double, number2 As Double, Optional Digits As Integer = 12) As Boolean

If (number1 - number2) ^ 2 < (10 ^ -Digits) ^ 2 Then
    dblCheckTheSame = True
Else
    dblCheckTheSame = False
End If

End Function

称之为:

MsgBox dblCheckTheSame(1.2345, 1.23456789)
MsgBox dblCheckTheSame(1.2345, 1.23456789, 4)
MsgBox dblCheckTheSame(1.2345678900001, 1.2345678900002)
MsgBox dblCheckTheSame(1.2345678900001, 1.2345678900002, 14)

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有