gpt4 book ai didi

c++ - Double in object 方法不接受分数值?

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:28 24 4
gpt4 key购买 nike

我在使用 C++ 面向对象脚本时遇到问题。当我创建一个对象时,我希望根据它的属性 MyAValueMyBValueMyCValue 计算一个 AttributeQ .

在使用 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

最佳答案

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

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

整数会在不可见的情况下转换回 double ,这就是您在代码中没有看到任何错误的原因。

关于c++ - Double in object 方法不接受分数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7367957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com