轻松切换单精度和双精度

时间:2014-04-01 09:23:26

标签: performance vba excel-vba precision excel

要在C中切换单精度和双精度,我们使用类似的东西:

#ifdef USE_DOUBLE
typedef double data_t;
#else
typedef float data_t;
#endif

是否有一种简单的方法可以执行相同的操作,以便我可以在VBA中轻松切换两者?

2 个答案:

答案 0 :(得分:1)

在VBS中,用户定义的类型被抽象为类。例如,

Public Const PRECISION = 1

Class data_t
    Private dValue

    Private Sub Class_Initialize
        dValue = 0
    End Sub

    Public Property Get Value 'inside out
        Value = dValue
    End Property

    Public Property Let Value(val) 'outside in
        If PRECISION = 1 Then
            dValue = CSng(val)
        Else
            dValue = CDbl(val)
        End If
    End Property    
End Class

Set obj = New data_t
obj.Value = 0.00000011920928955078125
Msgbox obj.Value

如果PRECISION = 1,则输出为1.192093E-07

否则输出将为1.19209289550781E-07

您可以通过添加类模块轻松修改VBA中的上述代码。

答案 1 :(得分:0)

这在VBA中几乎相同:

#Const USE_DOUBLE = False

#If USE_DOUBLE Then
    Public data As Integer
#Else
    Public data As Double
#End If

#代表条件编译。