2

我一定是错过了什么,这是怎么回事?

float controlFrameRate = 1/60;

它应该分配像 0.0166666667 这样的东西,但它的输出是 0.00000 等等。视觉工作室只是在骗我吗?

4

4 回答 4

7

那是因为1/60是一个整数,它是0,因为整数除法会截断。这用于初始化浮点数,0.您可以通过首先将 RHS 表达式设为浮点数来修复它:

float controlFrameRate = 1.0f/60;

float controlFrameRate = 1/60.0f;

在 C++ 中,诸如 等的字面量142, int, 1.0are 3.1416doublefin1.0f使字面量为 a float。请注意,在f上面的示例中可能已经省略了。但是,如果双精度值超出浮点数范围,则将双精度值分配给浮点数可能会出现问题。

于 2012-06-03T16:39:07.247 回答
3

一个整数除以另一个整数产生一个整数,并且是一种截断操作。您将获得小于或等于实际值的值。

使至少一个常量浮点来修复它:

float controlFrameRate = 1.0 / 60;
float controlFrameRate = 1 / 60.0;
float controlFrameRate = 1.0 / 60.0;
于 2012-06-03T16:40:58.150 回答
2

 float controlFrameRate = 1.f/60;

或者

 float controlFrameRate = 1/60.f;

或者

 float controlFrameRate = 0.1f/6;

;-)

于 2012-06-03T16:40:18.457 回答
0

你应该使用1/60.0. 否则你不会得到float结果。

于 2012-06-03T16:40:20.990 回答