2016-12-13 39 views
1

我有一個Windows VARIANT持有BSTR與(數字)(數字值)。Windows變體強制規則?

我想用VariantChangeType這個BSTR值轉換爲VT_I4或VT_I8或...

令我驚訝的是,傳遞的"5.6"一個字符串值,.是我小數點分隔符,函數成功整數轉換,並且由此產生的lValllVal的值爲6!我本來預計會出現轉換錯誤,或者5,這是sscanf給我的值。

-->是否有關於VARIANT conversion functions使用的轉換規則的任何文檔?<--

我發現VariantChangeType通過(例如)VarI4FromStr實施,但有信息WRT。這個函數使用的轉換規則。

+0

https://social.msdn.microsoft.com/Forums/vstudio/en-US/9fee1107-957b-403c-86c1-f42ccfb88f50/windows-variant-coercion-rules –

+0

從MSDN:」 ...看起來VarI4FromStr和VariantChangeType在轉換期間向上或向下舍入值,例如「5.4」被轉換爲5.「 –

回答

0

似乎沒有任何文件wrt。這個。

linked MSDN thread和位調試,我可以斷定:

  • VariantChangeType卻會調用DATAY類型轉換函數(如備註)
  • VarI4FromStr好像叫VarR8FromStr內部 - 這說明了我們有四捨五入
  • VarR*FromStr好像叫VarParseNumFromStr
  • VarParseNumFromStr似乎進一步委託數字解析本身(在VS2010中我的快速測試);它不記錄任何解析規則afaikt。
  • 舍入似乎使用Round Half to Even或一些變化。