问题:我可以假设Str(myString)
将始终返回与Str(CDbl(myString))
相同的结果(假设myString
被静态输入为字符串)?< / p>
上下文:
我试图了解VBA的隐含转换。到目前为止,在我看来Str(myString)
myString
解析为双(文化敏感),然后例如,使用德语区域设置(即使用,
作为小数分隔符),它认为
" 1.2" = Str(1.2) = Str("1,2") = Str(CDbl("1,2"))
由于这些隐式转换对我来说包含很多“魔力”,因此我尝试使用显式转换重写一个使用隐式转换(Str(myString)
)的过程而不改变行为。
不幸的是,文档是错误的,因此没用。 (Str
的参数documentation claims被解释为Long
,这显然是垃圾:如果是这种情况Str(1.2)
永远不会产生" 1.2"
。 )
答案 0 :(得分:2)
你的陈述是真的。 Str(x)和Str(Cdbl(x))给出相同的结果,前提是x是String数据类型并包含有效数字。
我做了一个小测试以确信。 我使用Excel,但它与Access保持一致。
Public Function myStr(txt As String) As String
myStr = Str(txt)
End Function
Public Function myStrCDbl(txt As String) As String
myStrCDbl = Str(CDbl(txt))
End Function
我尝试了一些键值(0,1.2,1E + 307,1E-307,...):myStr和myStrCDbl的结果总是相同。
我也同意你的说法是错误的。如果Str()参数被解释为Long
,则Str(1.2)将给出“1”,因为Long
是整数类型。
答案 1 :(得分:0)
与此同时,我找到了VBA language specification并且可以确认规范也回答了“是”的问题:
如果Expression的值不是错误 数据值,则返回表达式为让 -coerced的结果的Double数据值加倍。
[如果Number是一个字符串,],返回的值是应用于让 - 将数字转换为 Double <的结果的Str函数的结果/强>