我使用一个for-loop来确定long double是否是一个int。我设置了for循环,另一个long double,介于2和final^ 1 /2之间。Final是一个循环,基本上是2到2-10减1的幂。然后我在检查final是否是整数。我的问题是,如何只获得整数的final值?我的解释可能有点混乱,下面是我的整个循环代码。顺便说一句,我使用长双,因为我计划增加这些数字非常大。
for (long double ld = 1; ld<10; ld++) {
long double final = powl(2, ld) - 1;
//Would return e.g. 1, 3, 7, 15, 31, 63...etc.
for (long double pD = 2; pD <= powl(final, 0.5); pD++) {
//Create new long double
long double newFinal = final / pD;
//Check if new long double is int
long int intPart = (long int)newFinal;
long double newLong = newFinal - intPart;
if (newLong == 0) {
NSLog(@"Integer");
//Return only the final ints?
}
}
}发布于 2013-12-12 02:09:16
把它转换成整数然后把它从自身中减去?
long double d;
//assign a value to d
int i = (int)d;
if((double)(d - i) == 0) {
//d has no fractional part
}作为纸条..。由于浮点数学在编程中的工作方式,这个==检查不一定是最好的选择。最好是决定某种程度的容忍度,并检查d是否在该容忍范围内。
例如:
if(fabs((double)(d - i)) < 0.000001) {
//d's fractional part is close enough to 0 for your purposes
}您还可以使用long long int和long double来完成相同的任务。只需确保您对所使用的任何类型都使用了正确的绝对值函数:
fabsf(float)fabs(double)fabsl(long double)编辑.基于对实际问题的澄清.似乎您只是想弄清楚如何从方法中返回集合。
-(NSMutableArray*)yourMethodName {
NSMutableArray *retnArr = [NSMutableArray array];
for(/*some loop logic*/) {
// logic to determine if the number is an int
if(/*number is an int*/) {
[retnArr addObject:[NSNumber numberWithInt:/*current number*/]];
}
}
return retnArr;
}把你的逻辑融入这个方法。找到要返回的数字后,使用我在其中设置的[retnArr addObject:[NSNumber numberWithInt:]];方法将其插入数组中。
返回数组后,访问如下数字:
[[arrReturnedFromMethod objectAtIndex:someIndex] intValue];或者,您可能希望将它们作为不同的类型抛到NSNumber对象中。
您还可以使用:
[NSNumber numberWithDouble:][NSNumber numberWithLongLong:]并且有匹配的getter (doubleValue,longLongValue)来提取数字。NSNumber还有很多其他方法,但这些方法似乎是您最想要使用的方法。
https://stackoverflow.com/questions/20533707
复制相似问题