假设我有一个名为 foo 的 float 。 foo 以一定的间隔增加或减少。一旦 foo 成功达到指定的数字/,我怎样才能让 foo 再次从零开始,而对于递减则相反?
例如:
int max = 0;
int min = 50;
float foo = 45;
foo += 7.5;
foo
现在是 52.5。但由于我在最大数量上指定了 50,我希望它在那个点溢出,以便结果仅为 2.5。
或者:
int min = 0;
int max = 50;
float foo = 45;
foo += 108.3;
结果应该是 3.3。刚溢出3次。
反之:
int min = 0;
int max = 50;
float foo = 1;
foo -= 5.5;
结果为 -4.5,但应为 44.5。
我在想也许这样的事情可以解决问题:
foo = foo % max;
if (foo <0)
foo+=max;
但 % 仅适用于整数,包括一个库只是为了获得 fmod 感觉有点过分了。
无论如何,我想知道这是否可行,是否可以用更少的代码完成,是否可以在没有 fmod 的情况下完成。
最佳答案
因为 #include <fmod>
太主流了,你可以用;
if(foo > max)
{
int c = foo / max;
foo = foo - max*c;
}
else if(foo < min)
{
int c = foo / max;
if( c < 0 ) c = c * -1;
foo = foo + max*c;
foo = max + foo;
}
结果:
对于:
int min = 0;
int max = 50;
float foo = 1;
foo -= 5.5;
对于:
int min= 0;
int max= 50;
float foo = 45;
foo += 7.5;
关于C++:导致数字在成功某个值时溢出并从零开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39015679/