0

我正在使用 afor-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?
    }
}
}
4

1 回答 1

1

只需将其转换为 int 并从自身中减去它?

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 intandlong 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,但这些似乎是您最想使用的。

于 2013-12-12T02:09:16.480 回答