5

NSNumberaが分数かどうかを確認する最良の方法は何ですか?

NumberIsFraction(@(0)); // NO;
NumberIsFraction(@(0.5)); // YES;
NumberIsFraction(@(1.0)); // NO;

ボーダーケースの処理とパフォーマンスの点で「最高」。

4

4 に答える 4

14

ドメインが小さい型への変換を回避する:

BOOL NumberIsFraction(NSNumber *number) {
    double dValue = [number doubleValue];
    if (dValue < 0.0)
        return (dValue != ceil(dValue));
    else
        return (dValue != floor(dValue));
}
于 2012-09-03T15:12:39.007 に答える
4

私は現在使用しています:

BOOL NumberIsFraction(NSNumber* number) {
    return ![number isEqualToNumber:@(number.longLongValue)];
}
于 2012-09-03T11:57:57.247 に答える
1
-(BOOL) NumberIsFraction: (NSNumber*)number
{
   NSLog(@"%0.16g",number.doubleValue);
   NSLog(@"%d", number.intValue);
   double diff = number.doubleValue - number.intValue;
   if (diff>0)
     return YES;
   else return NO;
}
于 2012-09-04T11:34:45.490 に答える