_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;

当数据较大时数据被截断,灵异事件就出现了。
Posted on 2006-12-20 11:24 艾凡赫 阅读(3179) 评论(2)  编辑 收藏 引用 所属分类: ADO编程技术

Feedback

# re: _variant_t 中VT_DECIMAL 问题  回复  更多评论   

2008-10-18 17:23 by tt
double val=var.decVal.Lo64;也有问题吧,double是8位的,占符号位,var.decVal.Lo64;是无符号的8位.

# re: _variant_t 中VT_DECIMAL 问题  回复  更多评论   

2008-10-25 11:50 by ivenher
谢谢,可能有问题,不过已经够用了:)

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理