SHR*_*SHR 4 c++ com ado decimal
我正在尝试为ADO编写一个包装器.
当类型是A时,A DECIMAL是一种类型.COM VARIANTVARIANTVT_DECIMAL
我试图将它放在c本机数据类型中,并保留变量值.似乎正确的类型是long double,但我得到"没有合适的转换错误".
例如:
_variant_t v;
...
if(v.vt == VT_DECIMAL)
{
double d = (double)v; //this works but I'm afraid can be loss of data...
long double ld1 = (long double)v; //error: more then one conversion from variant to long double applied.
long double ld2 = (long double)v.decVal; //error: no suitable conversion function from decimal to long double exist.
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
使用double来存储所有可能的十进制值是否完全安全?
如果没有,我怎样才能将小数转换为long double?
如何将小数转换为字符串?(使用<<运算符,sprintf对我也有好处)
内部表示DECIMAL不是双精度浮点值,而是整数而不是符号/缩放选项.如果要初始化DECIMAL部件,则应初始化这些字段 - 96位整数值,比例,符号,然后获得有效的十进制VARIANT值.
你的问题:
使用double来存储所有可能的十进制值是否完全安全?
您不能直接初始化为double(例如VT_R8),但您可以初始化为double变量并使用变换转换API转换为VT_DECIMAL.可以应用小的舍入值.
如果没有,我怎样才能将小数转换为long double?
如何将小数转换为字符串?(使用<<运算符,sprintf对我也有好处)
VariantChangeType可以将decimal变量转换为另一种类型的变体,包括integer,double,string - 您提供要转换的类型.反之亦然,您也可以将不同的东西转换为十进制.