Objective c 仅当double为int时返回相同的double?(无小数)Obj-C

Objective c 仅当double为int时返回相同的double?(无小数)Obj-C,objective-c,for-loop,int,long-double,Objective C,For Loop,Int,Long Double,我正在使用一个for循环来确定长双精度是否是一个int。我已经设置了for循环循环另一个长双精度,它介于2和final^1/2之间Final是我设置的一个循环,基本上是2到2-10减1的幂。然后我检查final是否为整数。我的问题是,如何才能只获得整数的最终值? 我的解释可能有点混乱,所以这里是我的整个循环代码。顺便说一句,我使用长双打,因为我计划在很大程度上增加这些数字 for (long double ld = 1; ld<10; ld++) { long double fin

我正在使用一个
for循环
来确定
长双精度
是否是一个int。我已经设置了for循环循环另一个
长双精度
,它介于2和
final
^1/2之间
Final
是我设置的一个循环,基本上是2到2-10减1的幂。然后我检查
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?
    }
}
}

for(long double ld=1;ld将其转换为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
}
将逻辑插入此方法。找到要返回的数字后,使用我在其中提出的
[retnArr addObject:[NSNumber numberwhithint:];
方法将其插入数组

返回数组后,请访问以下数字:

[[arrReturnedFromMethod objectAtIndex:someIndex] intValue];
或者,您可能希望将它们作为不同的类型放入
NSNumber
对象中

您还可以使用:

  • [NSNumber number number with double::
  • [NSNumber numberwhithlonglong:

还有匹配的getter(
doubleValue
longvalue
)提取数字。
NSNumber
还有很多其他方法,但这些方法似乎是您最想使用的方法。

对不起,我已经有了这个方法。我的解释可能不清楚。我知道如何判断它是否为int。因为d发生了变化,我只想返回作为int的d。谢谢您的建议n检查它是否为0。你必须大量澄清你被困在哪里。对于没有小数部分的任何双精度,if
将返回true,而对于有小数部分的双精度,if
将返回false。使用该逻辑来做任何你想做的事情,现在它正在对数字进行排序。好的,我有一个。a是一个通过lo运行的双精度op现在是数字1,3,7,15,31…等等。我现在想在它的循环中取一个A,除以另一个通过循环运行的双精度B。这个双精度是2到A的1/2的幂。我们现在有了A/B。我把A/B设置为双精度C。因为所有这些值都在变化,我只想在C是int时记录C。清楚吗?这在吗方法?您需要将一组数字返回给调用者?谢谢您的帮助!您编辑的解决方案帮助了我!@nhgrif sorta有一些东西。您应该能够获取数字,将其转换为long,将其转换为double,然后逐位比较这两个数字。您唯一需要检查的是“已使用”的位数在long中小于double尾数的大小。哎呀——我看到您使用的是
长double
,而不是在
之间转换。也许您可以转换为
[[arrReturnedFromMethod objectAtIndex:someIndex] intValue];