我遇到了面向C ++面向对象的脚本的问题。当我创建对象时,我希望根据其属性AttributeQ
,MyAValue
和MyBValue
来计算MyCValue
。
在使用Visual 2010调试器时,我注意到TempAttribueQ
似乎总是0
(当然,在它初始化之前除外)。假设Delta != 0
,BVal == Maximum
和DeltaA == DeltaC
,则TempAttribueQ
应为1/3
而不是0
。
起初我认为这是一个范围问题,但变量是在if-else
语句之外定义的。我已经尝试将TempAttribueQ
初始化为一些令人发指的数字,它会在if-else
语句变为0
时保持不变。
这是我的代码......
void SetMyAttribueQ(){
double TempAVal = MyAValue;
double TempBVal = MyBValue;
double TempCVal = MyCValue;
double Minimum = min(min(TempAVal, TempBVal), TempCVal);
double Maximum = max(max(TempAVal, TempBVal), TempCVal);
double Delta = Maximum - Minimum;
double DeltaA = 0;
double DeltaB = 0;
double DeltaC = 0;
double TempAttribueQ = 0;
if(Delta == 0) {
MyAttribueQ = TempAttribueQ; // this->SetMyAttribueQ(TempAttribueQ);
}
else {
DeltaA = /* (a removed equation goes here... */
DeltaB = /* (a removed equation goes here... */
DeltaC = /* (a removed equation goes here... */
if(AVal == Maximum)
TempAttribueQ = (DeltaC - DeltaB);
else if(BVal == Maximum)
TempAttribueQ = (1/3) + (DeltaA - DeltaC);
else
TempAttribueQ = (2/3) + (DeltaB - DeltaA);
MyAttribueQ = TempAttribueQ;
}
}
什么阻止TempAttribueQ
获得1/3
或2/3
的值?或者,是什么原因导致它被设置为0
?
答案 0 :(得分:3)
当您将一个整数除以另一个整数时,您将得到整数结果。将 或两者的常量更改为非整数以修复它 - C ++规则将导致另一个在分割发生之前转换为浮点。以下所有方法都有效:
整数将被无形地转换回双重,这就是为什么你没有在代码中看到任何错误。
答案 1 :(得分:2)
1
是一个整数,3
是一个整数,因此1/3
使用整数运算。
您希望使用1.0/3.0
强制进行双精度算术。
答案 2 :(得分:2)
1/3 == 0
由于整数除法,设置为TempAttribueQ
。
您需要1./3
生成0.3333333..
答案 3 :(得分:2)
尝试1.0 / 3.0和2.0 / 3.0。由于整数除法,1/3和2/3为0。