開發(fā)中兰伤,碰到數(shù)值計(jì)算是很正常的内颗,如果是整型計(jì)算都沒問題,但是如果碰到浮點(diǎn)數(shù)(小數(shù))不管是float double型敦腔,只要參與計(jì)算就會(huì)出現(xiàn)失真的情況均澳,
iOS 開發(fā)中? 可以使用NSDecimalNumber來計(jì)算和比較,今天整理了一下方法,用鏈?zhǔn)骄幊痰乃枷?封裝了一個(gè) NSString 類目找前。目前只包含簡(jiǎn)單的加糟袁、減、乘躺盛、除项戴、大于、小于槽惫、大于周叮、等于,大于等于界斜、小于等于的方法则吟。
備注:本人的項(xiàng)目數(shù)據(jù)模型用的YYModel,后臺(tái)返回的數(shù)值用NSNumber存锄蹂,計(jì)算的時(shí)候用NSNumber的stringValue屬性氓仲。
.h 文件
- (NSString *(^) (NSString *))add;
- (NSString *(^) (NSString *))sub;
- (NSString *(^) (NSString *))mul;
- (NSString *(^) (NSString *))div;
- (BOOL(^) (NSString*))dengyu;
- (BOOL(^) (NSString*))dayu;
- (BOOL(^) (NSString*))dayudengyu;
- (BOOL(^) (NSString*))xiaoyu;
- (BOOL(^) (NSString*))xiaoyudengyu;
.m 文件
- (NSString *(^) (NSString *))add {
? ? NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:self];
? ? return^NSString*(NSString*value) {
? ? ? ? NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:value];
? ? ? ? NSDecimalNumber*resultNum = [num1decimalNumberByAdding:num2];
? ? ? ? return[resultNum stringValue];
? ? };
}
- (NSString *(^)(NSString *))sub {
? ? NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:self];
? ? return?^NSString* (NSString*value) {
? ? ? ? NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:value];
? ? ? ? NSDecimalNumber *resultNum = [num1decimalNumberBySubtracting:num2];
? ? ? ??return?[resultNum stringValue];
? ? };
}
- (NSString *(^)(NSString *))mul {
? ? NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:self];
? ? return?^NSString* (NSString*value) {
? ? ? ? NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:value];
? ? ? ? NSDecimalNumber*resultNum = [num1decimalNumberByMultiplyingBy:num2];
? ? ? ? return?[resultNum stringValue];
? ? };
}
- (NSString *(^)(NSString *))div {
? ? NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:self];
? ? return?^NSString* (NSString*value) {
? ? ? ? NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:value];
? ? ? ? NSDecimalNumber*resultNum = [num1decimalNumberByDividingBy:num2];
? ? ? ? return?[resultNum stringValue];
? ? };
}
- (BOOL(^) (NSString*))dengyu{
? ? NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:self];
? ? return?^BOOL(NSString*value) {
? ? ? ? NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:value];
? ? ? ? NSComparisonResult result = [num1compare:num2];
? ? ? ? if?(result ==NSOrderedSame) {
? ? ? ? ? ? returnYES;
? ? ? ? }?else?{
? ? ? ? ? ??returnNO;
? ? ? ? }
? ? };
}
- (BOOL(^)(NSString*))dayu{
? ? NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:self];
? ? return?^BOOL(NSString *value) {
? ? ? ? NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:value];
? ? ? ? NSComparisonResult result = [num1compare:num2];
? ? ? ? if?(result == NSOrderedDescending) {
? ? ? ? ? ? returnYES;
? ? ? ? }?else?{
? ? ? ? ? ? returnNO;
? ? ? ? }
? ? };
}
- (BOOL(^) (NSString*))dayudengyu{
? ? NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:self];
? ? return?^BOOL(NSString*value) {
? ? ? ? NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:value];
? ? ? ? NSComparisonResult result = [num1compare:num2];
? ? ? ? if(result == NSOrderedDescending || result ==NSOrderedSame) {
? ? ? ? ? ? returnYES;
? ? ? ? }?else?{
? ? ? ? ? ? returnNO;
? ? ? ? }
? ? };
}
- (BOOL(^) (NSString*))xiaoyu{
? ? NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:self];
? ? return?^BOOL(NSString*value) {
? ? ? ? NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:value];
? ? ? ? NSComparisonResult result = [num1compare:num2];
? ? ? ? if?(result ==NSOrderedAscending) {
? ? ? ? ? ? returnYES;
? ? ? ? }?else?{
? ? ? ? ? ? returnNO;
? ? ? ? }
? ? };
}
- (BOOL(^) (NSString*))xiaoyudengyu{
? ? NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:self];
? ? return^BOOL(NSString*value) {
? ? ? ? NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:value];
? ? ? ? NSComparisonResult result = [num1compare:num2];
? ? ? ? if?(result ==NSOrderedAscending || result ==NSOrderedSame) {
? ? ? ? ? ? returnYES;
? ? ? ? }?else?{
? ? ? ? ? ? returnNO;
? ? ? ? }
? ? };
}
調(diào)用非常簡(jiǎn)單:因?yàn)榉祷氐氖亲址诠こ汤锒疾挥棉D(zhuǎn)換可以直接使用得糜。
NSString *num1 = @"3.455";
NSString *rst =?num1.add(@"4.7").sub(@"5.6789");