3
A
답변
9
@interface NSDecimalNumber (IsIntegerNumber)
@property (readonly) BOOL isIntegerNumber;
@end
@implementation NSDecimalNumber (IsIntegerNumber)
-(BOOL)isIntegerNumber {
NSDecimalValue value = [self decimalValue];
if (NSDecimalIsNotANumber(&value)) return NO;
NSDecimal rounded;
NSDecimalRound(&rounded, &value, 0, NSRoundPlain);
return NSDecimalCompare(&rounded, &value) == NSOrderedSame;
}
@end
+1
Swift version here : https://stackoverflow.com/a/46331176/1187415. –
-3
이 시도, 당신은 첫 번째 줄을 건너 뛸 수 있습니다, 난 그냥 진수에서 정수 빼기 NSDecimalNumber 객체
NSDecimalNumber *decNumb=[NSDecimalNumber decimalNumberWithString:@"20.5"];//try with just 20
NSString* str=[NSString stringWithFormat:@"%@",decNumb];
if ([str rangeOfString:@"."].location==NSNotFound && [str rangeOfString:@"-"].location==NSNotFound) {
NSLog(@"it is whole number");
}
else
NSLog(@"it is not whole number");
3
을 만드는 데 사용했다. 차이가 0이면 십진수는 정수입니다.
// testVal is NSDecimalNumber
NSString *test = [testVal stringValue];
int intVal = [test intValue];
double doubleVal = [test doubleValue];
if(doubleVal-intVal == 0){
NSLog(@"Whole number!");
}
또는 전체 번호를 원래 값으로 비교 :
if(intVal == doubleVal){
NSLog(@"Whole number!");
}
0
당신이 사용할 수없는 경우 ((번호 % 1) == 0)
0
@implementation NSDecimalNumber (isWholeNumber)
-(BOOL)isWholeNumber
{
double x = [self doubleValue]; //The approximate value of the receiver as a double.
double y = floor (x);
if(fabs(x - y) < DBL_EPSILON)
return YES;
return NO;
}
@end
// [myDecNumber isWholeNumber];
3
이 작동해야합니다.
NSDecimalNumber
을 double
으로 변환하는 방법을주의하십시오.
NSDecimalNumber* input = [...];
NSDecimal roundedDecimal;
NSDecimalRound(&roundedDecimal, [input decimalValue], 0, NSRoundPlain);
NSDecimalNumber* roundedNumber = [NSDecimalNumber decimalNumberWithDecimal:roundedDecimal];
BOOL inputIsWholeNumber = [input isEqualToNumber:roundedNumber];
또한 NaN
값을 확인해야합니다.
0
확실하지 왜,하지만 난 조디 Hagins '또는 Sulthan의 솔루션은 내가 약간 다른 방식 갔다 그래서 작동하도록 할 수 없습니다 어떤 이유로 :
-(BOOL)isWholeNumber:(NSDecimalNumber *)number {
NSDecimalNumber *input = number;
NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain
scale:0
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:NO];
NSDecimalNumber *vOne = [NSDecimalNumber decimalNumberWithString:@"1"];
NSDecimalNumber *result = [number decimalNumberByMultiplyingBy:vOne
withBehavior:handler];
BOOL inputIsWholeNumber = [input isEqualToNumber:result];
return inputIsWholeNumber;
}
무엇 u는 시도를 ?? – IronManGill
잘 모르겠습니다. 'if ([myDecNumber isEqualToNumber : [myDecNumber integerValue]])'는 어떨까요? –
10 진수 값을 int로 캐스팅하고 그 값이 동일하면 – muffe