VB6中的浮点比较
发布时间:2020-12-17 07:30:08 所属栏目:百科 来源:网络整理
导读:在VB6中测试两个单打是否相同的最佳方法是什么? 我想测试两个单值相等到7个有效数字. This MSDN article建议使用类似的东西 If Abs(a - b) = Abs(a / 10 ^ 7) Then valuesEqual = TrueEnd If 但是,某些值可能会失败,例如 Public Sub Main() Dim a As Single
在VB6中测试两个单打是否相同的最佳方法是什么?
我想测试两个单值相等到7个有效数字. This MSDN article建议使用类似的东西 If Abs(a - b) <= Abs(a / 10 ^ 7) Then valuesEqual = True End If 但是,某些值可能会失败,例如 Public Sub Main() Dim a As Single Dim b As Single a = 0.50000005 b = 0.50000014 Debug.Print "a = " & a Debug.Print "b = " & b Debug.Print "a = b: " & (a = b) Debug.Print "SinglesAreEqual(a,b): " & SinglesAreEqual(a,b) // Output: // a = 0.5000001 // b = 0.5000001 // b = b: False // SinglesAreEqual(a,b): False End Sub Private Function SinglesAreEqual(a As Single,b As Single) As Boolean If Abs(a - b) <= Abs(a / 10 ^ 7) Then SinglesAreEqual = True Else SinglesAreEqual = False End If End Function 我发现获得结果的最简单方法是将值转换为字符串,但看起来非常难看: Private Function SinglesAreEqual(a As Single,b As Single) As Boolean SinglesAreEqual = (Str$(a) = Str$(b)) End Function 有没有更好的方法? 解决方法
我维护一个CAD / CAM应用程序,我必须始终处理浮点数.我有一个函数,我调用fComp,当我需要测试相等性时,我传递一个浮点值. fComp调用舍入函数设置为一定的精度.对于我们的系统,我舍入到小数点后6位.你的可能需要更高或更低,这取决于应用程序.
fComp函数存在,因此我有一个位置可以更改这些计算中使用的舍入系数.几年前,当我们开始制造更高精度的机器时,这被证明是方便的. Public Function pRound(ByVal Value As Double,ByVal Power As Double) As Double Dim TempValue As Double Dim tSign As Double TempValue = Value tSign = TempValue TempValue = Abs(TempValue) TempValue = TempValue * 10 ^ (Power * -1) TempValue = Fix(TempValue + 0.5) TempValue = TempValue / 10 ^ (Power * -1) pRound = TempValue * Sign(tSign) End Function 要舍入到第6个小数位 RoundedNumber = pRound(MyValue,-6) 负数位于左侧正数的小数点右侧. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |