VBA:Str(myString) 与 Str(CDbl(myString)) 的作用相同吗?

标签 vba ms-access internationalization type-conversion

问题:我是否可以假设 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 claimsStr 的参数解释为 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/

相关文章:

javascript - Django项目中需要国际化的JavaScript文件应该放在哪里?

excel - 检查数组元素是否等于空间时出现意外的类型不匹配错误

excel - 即使第一个数字是 0 vba,也将数字格式化为两位数

vba - Outlook VBA错误440 : “Array Index out of Bounds” or “Automation error” ?

vba - VBA 编辑器中的字符编码

c# - MS Access 中的日期时间格式

VBA:对 DOMDocument 的 Html 响应

vba - 为什么某些 VBA 错误不触发错误处理?

spring-boot - 如何在 spring-boot 应用程序中外部化 i18n 属性文件

javascript - 如何根据区域设置确定年、月、日顺序?