【深度历险】:VC 关于定点数 VT_DECIMAL 转换为字符串CString的函数探秘!

来源:互联网 发布:yum search命令 编辑:程序博客网 时间:2024/05/17 02:45

    VC中没有现成的关于定点数 VT_DECIMAL 转换为字符串CString的函数可用,但是在进行数据库访问时,这种定点精度的小数却是一种应用极其广泛的数据格式,因为它可以固定精度,固定数据位数,可以很准确的表达小数类型。

     在需要进行VT_DECIMAL转换为字符串类型数据时,大多数人只是简单的进行如下格式的转换:

 

    

 

    在以上列出的3种方式中,

    第一种方式,结果带E符号,相信不是绝大多数应用所需要的, 例子: 1.2e-010

    第二种方式,精度丢失,我测试还发现有时数据很不准确。

    第三种方式,你怎么就知道精度一定是8呢?将定点数的用途完全乱用。

 

 

   实际上, VT_DECIMAL是一种非常理想化的定点数表达方式,其原始定义如下:

 

 

 

     基本数据用到的是

    1) Lo64,这个是存放实际数据的,64bit

    2) sign: 符号位,如果小于128,则是正数;sign>=128 则值value <0

    3) signscale, scale 这是规定了小数点的精度

    4) wReversed:这个是数据整体的长度,举例

     VT_DECIMAL(16, 3): 则规定了整个数据的长度是16(不包括小数点、符号位),其中3位小数

     所以:3.1415926 表示成 (16,3) 精度的表达形式是 3.141, Lo64=3141 sign =3

 

    好了,至此VT_DECIMAL的全部知识点讲解完毕,下面是实现其转换为CString 的函数,用到了一个很关键的函数:_ui64toa这个是专门用作64位整数转换为字符串的函数。

 

 

 

 

      好了,完整的函数已经写完,是不是要测试一下呢?等等,_ui64toa这个函数在哪里定义的呢?呵呵,留给各位去查吧,自己还是要多做做练习啊。