如何在Objective-C/Cocoa Touch中进行模数运算?

84

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

那么我尝试了以下代码:

CGFloat moduloResult = valueB % valueA;

编译器报错并告诉我:"invalid operands to binary %",这是怎么回事?

2个回答

207

2
tgmath.h在iPhone上可用吗?我想知道,因为我从来没有包含过math.h。我认为它是与Foundation框架一起提供的。 - HelloMoon
还有,tgmath.h和math.h之间有什么区别呢? - user4951
4
Jim表示,tgmath.h 是“类型通用”的(因此有“tg”),因此将根据您输入的数据类型来决定调用哪个 math.h 函数。例如,如果包含了 tgmath.h 并调用 floor(x),则会调用 math.h 中的 floorf(x) 如果 xfloat 类型,调用 floor(x) 如果 xdouble 类型,或者调用 floorl(x) 如果 xlong double 类型。 - George WS

11

如果我没记错,取模运算需要两个整数作为输入,所以你需要这样做:

CGFloat moduloResult = (float)((int)valueB % (int)valueA);
假设valueB和valueA都是浮点数。

3
当然,这并不能给你正确的答案,因为存在四舍五入的误差。 - fishinear
这似乎是一个荒谬的答案,但它通常非常接近你所需要的。当然,会有四舍五入的情况,但当你处理CGSizes等时,这完全没问题。 - Dan Rosenstark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接