考虑以下VBA功能:
Function castAndAdd(inputValue As Variant) As Variant
If IsNumeric(inputValue) Then
castAndAdd = CDbl(inputValue) + 4
Else
castAndAdd = inputValue
End If
End Function
从即时窗口调用它给出了这个输出:
?castAndAdd("5,7")
61
?castAndAdd("5, 7")
5, 7
单步调查“5,7”,我发现IsNumeric("5,7")
会返回true
。我想也许它会给出这个结果,因为在欧洲,逗号用作小数分隔符;这个结果很奇怪,因为我在美国,所以我的语言环境应该确定Excel只将句点识别为小数点分隔符,对吗?
即使我们搁置欧洲/美国问题,更大的问题是CDbl(“5,7”)返回57,因此CDbl("5,7") + 4
返回61而不是9.7,正如我所预期的那样逗号是小数点分隔符。这是一个错误,还是我不理解如何使用CDbl()
?
答案 0 :(得分:4)
逗号不会被识别为十进制,而是千位分隔符。该机制并不是那么明智,要求至少应该跟随三个数字,但基本上它会将数字分隔符中的任何一个解释为数字。
所以即使CDbl("4,5,,6,7")
也会产生4567作为数字。当逗号是千位分隔符时,所有这些都是正确的。如果像在一些欧洲国家那样,点数是千位分隔符,那么点就会发生类似的事情。