我正在使用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?
}
}
}
答案 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 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
还有很多其他方法,但这些方法似乎是你最想要使用的方法。