_variant_t 數據類型與其他數據類型的轉換比較麻煩,以前用的是從網上找來的一段代碼,存在一些問題,后果很嚴重,害我以為出現靈異事件了。
原方法如下:
case?VT_DECIMAL:?
?????????????{
??????????????????double?val?=?var.decVal.Lo32;
?????????????????????????????????????
????????????????????val?*=?(var.decVal.sign?==?128)??-1?:?1;
????????????????????val?/=?pow(10,?var.decVal.scale);?
????????????????????CString?strFormat;
????????????????????strFormat.Format("%d",?var.decVal.scale);
????????????????????strFormat?=?"%."+strFormat+"f";
?????????????????????????????????????????strValue.Format(strFormat,?val);
?????????????????????????????????break;
?????????????}
轉過多次沒出什么事就認為這段代碼可以用。結果問題就出在這段代碼。


/**////問題所在
double?val?=?var.decVal.Lo32;

//應改為?
?double?val=var.decVal.Lo64;當數據較大時數據被截斷,靈異事件就出現了。