2014-04-01 65 views
2

之间轻松切换到C单精度和双精度之间切换,我们使用这样的:单精度和双精度

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

是否有执行同样的事情,这样我可以在两者之间轻松切换的简单方法在VBA中?

回答

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 

如果精度= 1,输出将是1.192093E-07

否则输出将为1.19209289550781E-07

可以很容易地修改在VBA上面的代码通过添加类模块。

+0

这是一个很好的解决方案,但是它的性能表现是否有效? –

+0

它与创建/使用任何对象一样高效(或低效)。 –

0

这在VBA工作几乎相同:

#Const USE_DOUBLE = False 

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

#代表条件编译。

+0

这不完全相同,使用此代码我将不得不把这个条件放在每个变量上,而在CI中把条件放在类型声明上,并声明变量类型为“data” –

+0

哦,是的,我误解了你的码。但是,这仍然是在VBA中工作的唯一方法... – Manu