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];