这是VBA的IsNumeric和CDbl()函数中的一个错误吗?

考虑下面的VBAfunction:

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()

逗号不被识别为十进制,而是千位分隔符。 这个机制并不是那么聪明,至less需要三位数字,但实际上它会剥离成千上万个分隔符中的任何一个来解释它作为一个数字。

所以即使CDbl("4,5,,6,7")也会产生4567个数字。 当逗号是千位分隔符时,所有这一切都是正确的。 如果像在一些欧洲国家那样,重点是千位分隔符,那么类似的事情就会发生。