只有当double是int时才返回相同的double? (无小数)Obj-C

时间:2013-12-12 02:05:06

标签: objective-c for-loop int long-double

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

1 个答案:

答案 0 :(得分: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 intlong 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(doubleValuelongLongValue)来提取数字。 NSNumber还有很多其他方法,但这些方法似乎是你最想要使用的方法。