DECIMAL类型的sign成员,取值范围是什么?

lkaser 2013-12-31 11:28:29
我做了一个实验,两个DECIMAL相加的时候,如果不指定sign,那么就是正数加法。
如果设置sign为一个负数,那么看起来并没有用,并不能把d2这个变量标记成一个负数

#include<wtypes.h>
#include<oleauto.h>
void main()
{
DECIMAL d1;
d1.Lo32=20;
d1.Hi32=10;

DECIMAL d2;
d2.sign=-10;//sign设置为一个负数,我期待d2变成一个负数
d2.Lo32=5;

DECIMAL result;
VarDecAdd(&d1,&d2,&result);
return;
}

结果是result.Lo32=25。这个并不是我想要的。

所以我的问题是:
(1)如何才能让d2.sign起作用?
(2)结果当中的result.Hi32竟然等于3435973847。我期待他等于10,也就是d1.Hi32。

是不是我对于DECIMAL的理解还有错误呢?
请指点!
...全文
413 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkaser 2013-12-31
  • 打赏
  • 举报
回复
而且,更奇怪的是,如果我加上d2.scale=0;这句话,那么运算的结果result的各个字段sign,Hi32,Lo32,Mid32,Lo64就都变成0了,如下所示:

void main()
{
    DECIMAL d1;
    d1.Lo32=20;
    d1.Hi32=10;

    DECIMAL d2;
    d2.sign=-1;
    d2.scale=0;//加上了这句。
    d2.Lo32=5;

    DECIMAL result;
    VarDecAdd(&d1,&d2,&result);
    return;
}
我觉得至少Hi32不应该=0吧。这是为什么呢? 我对DECIMAL的理解可能是错的?
xurlhwhb 2013-12-31
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/LIBRARY/bb1c1a6x(v=vs.90).aspx decimal 的构造函数说的清楚了 int lo, int mid, int hi, bool isNegative, byte scale
boylafong 2013-12-31
  • 打赏
  • 举报
回复
scale好象是小数点后的位数,是为了提高精度的。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧