_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;当数据较大时数据被截断,灵异事件就出现了。