对象方法中的双重不接受小数值?

时间:2011-09-09 22:07:53

标签: c++ variables double

我遇到了面向C ++面向对象的脚本的问题。当我创建对象时,我希望根据其属性AttributeQMyAValueMyBValue来计算MyCValue

在使用Visual 2010调试器时,我注意到TempAttribueQ似乎总是0(当然,在它初始化之前除外)。假设Delta != 0BVal == MaximumDeltaA == 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/32/3的值?或者,是什么原因导致它被设置为0

4 个答案:

答案 0 :(得分:3)

当您将一个整数除以另一个整数时,您将得到整数结果。将 两者的常量更改为非整数以修复它 - C ++规则将导致另一个在分割发生之前转换为浮点。以下所有方法都有效:

  • 1.0 / 3.0
  • 1 / 3.0
  • 1.0 / 3

整数将被无形地转换回双重,这就是为什么你没有在代码中看到任何错误。

答案 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。