如何在objective-c/cocoa touch中进行模运算?

81 iphone modulo

我有两个CGFloat值,并且想要计算模数结果.换句话说:我想知道如果将valueA尽可能多地放入valueB,剩下的是什么.

所以我试过:

CGFloat moduloResult = valueB % valueA;
Run Code Online (Sandbox Code Playgroud)

编译器抱怨%并告诉我:"二进制%的操作数无效".任何的想法?

mou*_*iel 201

%是intlong不是floatdouble.

您可以使用fmod()fmodf()来自<math.h>.

更好的是CGFloat的发明者<tgmath.h>建议的.

  • Jim:`tgmath.h`是"类型泛型"(因此是"tg"),因此将决定在给定输入类型的情况下调用哪个`math.h`函数.(例如,调用带有`tgmath.h`的`floor(x)`将调用(来自`math.h`)`floorf(x)`如果`x`是`float`,`floor(x)`如果`x`是`double`,或者`floorl(x)`如果`x`是`long double`.) (4认同)
  • 在iphone上有tgmath.h吗?我想知道因为我从来没有包括math.h. 我认为它带有基础框架. (2认同)

Jam*_*uld 10

如果我记得正确模数需要2个整数作为输入,那么你需要类似的东西:

CGFloat moduloResult = (float)((int)valueB % (int)valueA);
Run Code Online (Sandbox Code Playgroud)

假设valueB和valueA都是浮点数

  • 当然,由于四舍五入,这不会给你正确的答案。 (3认同)