Performance 在单精度和双精度之间轻松切换

Performance 在单精度和双精度之间轻松切换,performance,vba,excel,precision,Performance,Vba,Excel,Precision,在C语言中,要在单精度和双精度之间切换,我们使用如下命令: #ifdef USE_DOUBLE typedef double data_t; #else typedef float data_t; #endif 是否有一种简单的方法来执行相同的操作,以便我可以在VBA中轻松地在两者之间切换?这在VBA中的效果几乎相同: #Const USE_DOUBLE = False #If USE_DOUBLE Then Public data As Integer #Else Publ

在C语言中,要在单精度和双精度之间切换,我们使用如下命令:

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

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

这在VBA中的效果几乎相同:

#Const USE_DOUBLE = False

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

#
代表条件编译。

在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
如果精度=1,则输出为1.192093E-07

否则,输出将为1.19209289550781E-07


通过添加一个类模块,您可以轻松地在VBA中修改上述代码。

这并不完全相同,使用此代码,我必须在每个变量上设置此条件,而在C中,我在类型声明上设置了一次条件,并将变量声明为“数据”类型。哦,是的,我误解了您的代码。但是,这仍然是在VBA中工作的唯一方法…这是一个很好的解决方案,但它在性能方面是否有效?它与创建/使用任何对象一样高效(或低效)。