問題:我能否假定Str(myString)
總會返回與Str(CDbl(myString))
相同的結果(假設myString
是靜態類型化爲字符串)?VBA:Str(myString)是否與Str(CDbl(myString))一樣?
語境: 我想了解VBA的隱式轉換。到目前爲止,在我看來,Str(myString)
- 隱式地解析
myString
爲雙(文化敏感),然後 - 結果轉換成文化不敏感字符串。
例如,使用德語語言環境中(即使用,
作爲小數點分隔符),它認爲
" 1.2" = Str(1.2) = Str("1,2") = Str(CDbl("1,2"))
由於這些隱式轉換中含有大量的「神奇」對我來說,我想重寫一個使用隱式轉換(Str(myString)
)的過程來使用顯式轉換,而不改變行爲。
不幸的是,該文件是錯誤的,因此,無用。 (該參數Str
被解釋爲Long
,這顯然是垃圾的documentation claims:如果是這樣的話Str(1.2)
不可能產生" 1.2"
)
只是對您的「解釋爲龍」的評論是垃圾,聲明。也許它寫得不是很好,但我想它指的是支持的精度:長一個比整數大得多(http://msdn.microsoft.com/en-us/library/y595sc15.aspx與http ://msdn.microsoft.com/es-es/library/06bkb8w2(v = vs.90).aspx)和小於一個(http://msdn.microsoft.com/en-us/library/x99xtshc。 ASPX)。因此,此函數支持的最大值是9.2 ... E + 18(十進制值),而不是1.79 .. + 308的雙精度值。 – varocarbas
@varocarbas:有趣的想法。不過,我認爲Double精度實際上比Long精度要大:Double具有[53位精度](http://en.wikipedia.org/wiki/Double-precision_floating-point_format)(不包括指數) ,而Long是VBA中的32位數字。 – Heinzi
這就是我所說的。 「小於兩倍」...「此功能支持的最大值是9.2 ... E + 18」( - >最大長度值)不是1.79 .. + 308的雙倍 – varocarbas