我有一个WindowsVARIANT
,其中包含一个(假定)数值的BSTR。
我想使用VariantChangeType
将此BSTR值转换为VT_I4或VT_I8或。。。
令我惊讶的是,传入一个字符串值"5.6"
,.
是我的十进制分隔符,该函数成功地进行了整数转换,得到的lVal
或llVal
值是6
!我本来预计会出现转换错误,或者5
的值,这就是sscanf
给我的值
-->
是否有VARIANT转换函数使用的转换规则的文档<--
我发现VariantChangeType
是通过(例如)VarI4FromStr
实现的,但该函数使用的转换规则中有零信息。
似乎没有任何关于这方面的文档。
通过链接的MSDN线程和一些调试,我可以得出结论:
VariantChangeType
确实调用了数据类型转换函数(如前所述)VarI4FromStr
似乎在内部调用VarR8FromStr
——这解释了我们如何进行舍入VarR*FromStr
似乎调用了VarParseNumFromStr
VarParseNumFromStr
似乎没有而进一步委托数字解析本身(我在VS2010中的快速测试);它没有记录任何解析规则AFAIK- Rounding似乎使用了Round Half to Even或一些变体