检查NSDecimalNumber是否是整数
检查NSDecimalNumber
的实例是否是整数的最简单方法是什么?
谢谢!
@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
从十进制数中减去整个数字。 如果差值为零,则十进制数是整数。
// 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!"); }
这应该工作。
当心使用将NSDecimalNumber
转换为double
。
NSDecimalNumber* input = [...]; NSDecimal roundedDecimal; NSDecimalRound(&roundedDecimal, [input decimalValue], 0, NSRoundPlain); NSDecimalNumber* roundedNumber = [NSDecimalNumber decimalNumberWithDecimal:roundedDecimal]; BOOL inputIsWholeNumber = [input isEqualToNumber:roundedNumber];
你也应该检查NaN
值。
你能不能用if((number%1)== 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];
不知道为什么,但由于某种原因,我无法得到乔迪哈金斯或苏丹的解决scheme工作,所以我采取了一个稍微不同的方式:
-(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; }
试试这个,你可以跳过第一行,我只是用它来创build一个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");
- 如何识别标签点击自定义UITableViewCell – Swift 3
- AVAudioPlayer – 你必须创build一个属性才能工作? (Xcode中)
- 当高度大于8192时,UILabel视图消失
- 当从Child ManagedObjectContext和Parent ManagedObjectContext保存时,CoreDataTableView不更新
- 并行测试:更早获得反馈,更快发布
- 在OnTouchUp和OnTouchDown的Swift UIButton背景更改?
- Swift用Swift编写的AST。 ∞的第1部分
- iOS – animation效果 – 图像popup
- 如何使用UNNotificationPresentationOptions