1

可能重复:
为什么这个整数除法会产生 0?

我有一个 C 头文件,其中包含在我的项目中使用的各种常量值。这些值是使用 #define 定义的(例如 #define MAX_DATA_VAL 5)。

当我在另一个文件中使用这个值进行除法时,我得到了错误的答案。

//- In file MyParameters.h
#define MAX_DATA_VAL  5
#define MIN_DATA_VAL -5



// - In file MyFunctions.c

#include "MyParameters.h"

void Function()
{
   float temp = 0;

   temp = 2/MAX_DATA_VAL;  // Wrong Output
}

temp 的值保持为 0(在调试时检查)。但是,如果我这样做了:

temp     = 0;
float a  = MAX_DATA_VAL;

temp = 2/MAX_DATA_VAL;  // Correct Output

我得到了正确的答案!......谁能解释发生了什么......

提前致谢 :)

4

4 回答 4

2

MAX_DATA_VAL 被视为整数,因此您的除法正在进行整数除法(向下舍入到最接近的整数)。为了确保它知道它是一个浮点数,请执行以下操作:

#define MAX_DATA_VAL 5.0f
于 2012-06-26T00:01:17.003 回答
1

您需要将定义的值转换为浮点数,否则它是整数。

void Function()
{
   float temp = 0;

   temp = 2 / (float)MAX_DATA_VAL;
}
于 2012-06-26T00:03:30.897 回答
0

temp = 2/MAX_DATA_VAL;

您将一个 int 除以一个 int,因此结果是一个 int - 可能不是您想要的。为了得到正确的结果,你应该做

 temp = 2.0/MAX_DATA_VAL;

我看到其他答案都建议更改 MAX_DATA_VAL 的定义。但是,我建议不要这样做,除非您检查了整个代码库并确保您不依赖它是一个 int。我的解决方案仅在 OP 说他的结果不符合预期的地方进行了更改。

于 2012-06-26T00:01:37.027 回答
0

在计算机世界中,2/5 == 0因为整数除法。

2 和 5 都是整数,所以计算机自然会认为结果也是整数。不幸的是,数学上它不是,所以它截断了其余部分。

于 2012-06-26T00:02:07.270 回答