问题:我是否可以假设 Str(myString)
将始终返回与 Str(CDbl(myString))
相同的结果(假设myString
静态类型化为字符串)?
上下文:
我想了解VBA的隐式转换。到目前为止,在我看来 Str(myString)
- 隐式将
myString
解析为 double 型(文化敏感),然后 - 将结果转换为文化不敏感字符串。
例如,使用德语语言环境(即使用 ,
作为小数点分隔符),它认为
" 1.2" = Str(1.2) = Str("1,2") = Str(CDbl("1,2"))
由于这些隐式转换对我来说包含很多“魔力”,因此我尝试将使用隐式转换 (Str(myString)
) 的过程重写为使用显式转换的过程,而不更改行为。
不幸的是,该文档是错误的,因此毫无用处。 (documentation claims 将 Str
的参数解释为 Long
,这显然是垃圾:如果是这样的话 Str(1.2)
永远不会产生“1.2”
。)
最佳答案
你的说法是正确的。如果 x 是字符串数据类型并且包含有效数字,则 Str(x) 和 Str(Cdbl(x)) 给出相同的结果。
我做了一个小测试来确信这一点。 我使用的是 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
是整数类型。
关于VBA:Str(myString) 与 Str(CDbl(myString)) 的作用相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18352832/