From 21d3023a9b7b6aff68c1170e345951396b1c6cfd Mon Sep 17 00:00:00 2001 From: 单军华 Date: Tue, 31 Jul 2018 13:35:21 +0800 Subject: [PATCH] no message --- screendisplay/screendisplay/Classes/Category/ThirdCategory/NSDecimalNumber+Addtion.m | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 210 insertions(+), 0 deletions(-) diff --git a/screendisplay/screendisplay/Classes/Category/ThirdCategory/NSDecimalNumber+Addtion.m b/screendisplay/screendisplay/Classes/Category/ThirdCategory/NSDecimalNumber+Addtion.m new file mode 100755 index 0000000..9fe5c50 --- /dev/null +++ b/screendisplay/screendisplay/Classes/Category/ThirdCategory/NSDecimalNumber+Addtion.m @@ -0,0 +1,210 @@ +// +// NSDecimalNumber+Addtion.m +// ��������������� +// +// Created by xuliying on 15/10/15. +// Copyright (c) 2015��� xly. All rights reserved. +// + +#import "NSDecimalNumber+Addtion.h" + +@implementation NSDecimalNumber (Addtion) ++(NSDecimalNumber *)aDecimalNumberWithStringOrNumberOrDecimalNumber:(id)stringOrNumber1 type:(calculationType)type anotherDecimalNumberWithStringOrNumberOrDecimalNumber:(id)stringOrNumber2 andDecimalNumberHandler:(NSDecimalNumberHandler *)handler{ + if (!stringOrNumber2 || !stringOrNumber1) { + NSLog(@"������������������"); + return nil; + } + NSDecimalNumber *one; + NSDecimalNumber *another; + NSDecimalNumber *returnNum; + if ([stringOrNumber1 isKindOfClass:[NSString class]]) { + one = [NSDecimalNumber decimalNumberWithString:stringOrNumber1]; + }else if([stringOrNumber1 isKindOfClass:[NSDecimalNumber class]]){ + one = stringOrNumber1; + }else if ([stringOrNumber1 isKindOfClass:[NSNumber class]]){ + one = [NSDecimalNumber decimalNumberWithDecimal:[stringOrNumber1 decimalValue]]; + }else{ + NSLog(@"���������������������"); + return nil; + } + + if ([stringOrNumber2 isKindOfClass:[NSString class]]) { + another = [NSDecimalNumber decimalNumberWithString:stringOrNumber2]; + }else if([stringOrNumber2 isKindOfClass:[NSDecimalNumber class]]){ + another = stringOrNumber2; + }else if ([stringOrNumber2 isKindOfClass:[NSNumber class]]){ + another = [NSDecimalNumber decimalNumberWithDecimal:[stringOrNumber2 decimalValue]]; + }else{ + NSLog(@"���������������������"); + return nil; + } + if (type == Add) { + returnNum = [one decimalNumberByAdding:another]; + }else if (type == Subtract){ + returnNum = [one decimalNumberBySubtracting:another]; + }else if (type == Multiply){ + returnNum = [one decimalNumberByMultiplyingBy:another]; + }else if (type == Divide){ + + if ([NSDecimalNumber aDecimalNumberWithStringOrNumberOrDecimalNumber:another compareAnotherDecimalNumberWithStringOrNumberOrDecimalNumber:@(0)] == 0) { + returnNum = nil; + }else + returnNum = [one decimalNumberByDividingBy:another]; + }else{ + returnNum = nil; + } + if (returnNum) { + if (handler) { + return [returnNum decimalNumberByRoundingAccordingToBehavior:handler]; + }else{ + return returnNum; + } + }else{ + NSLog(@"���������������������"); + return nil; + } +} + ++(NSComparisonResult)aDecimalNumberWithStringOrNumberOrDecimalNumber:(id)stringOrNumber1 compareAnotherDecimalNumberWithStringOrNumberOrDecimalNumber:(id)stringOrNumber2{ + if (!stringOrNumber2 || !stringOrNumber1) { + NSLog(@"������������������"); + stringOrNumber2 = @"0.00"; + stringOrNumber1 = @"0.00"; + } + + NSDecimalNumber *one; + NSDecimalNumber *another; + if ([stringOrNumber1 isKindOfClass:[NSString class]]) { + one = [NSDecimalNumber decimalNumberWithString:stringOrNumber1]; + }else if([stringOrNumber1 isKindOfClass:[NSDecimalNumber class]]){ + one = stringOrNumber1; + }else if ([stringOrNumber1 isKindOfClass:[NSNumber class]]){ + one = [NSDecimalNumber decimalNumberWithDecimal:[stringOrNumber1 decimalValue]]; + }else{ + NSLog(@"���������������������"); + return -404; + } + + if ([stringOrNumber2 isKindOfClass:[NSString class]]) { + another = [NSDecimalNumber decimalNumberWithString:stringOrNumber2]; + }else if([stringOrNumber2 isKindOfClass:[NSDecimalNumber class]]){ + another = stringOrNumber2; + }else if ([stringOrNumber2 isKindOfClass:[NSNumber class]]){ + another = [NSDecimalNumber decimalNumberWithDecimal:[stringOrNumber2 decimalValue]]; + }else{ + NSLog(@"���������������������"); + return -404; + } + return [one compare:another]; +} + ++(NSString *)stringWithDecimalNumber:(NSDecimalNumber *)str1 scale:(NSInteger)scale{ + if (!str1) { + return @""; + } + NSString *str = [NSString stringWithFormat:@"%@",str1]; + if (str && str.length) { + if ([str rangeOfString:@"."].length == 1) {//������������ + NSArray *arr = [str componentsSeparatedByString:@"."]; + if (scale > 0) { + NSInteger count = [arr[1] length]; + for (NSInteger i = count; i<scale; i++) { + str = [str stringByAppendingString:@"0"]; + } + return str; + }else{ + return arr[0]; + } + }else{//��������������� + if ([str rangeOfString:@"."].length) { + return @""; + } + if (scale > 0) { + str = [str stringByAppendingString:@"."]; + for (int i = 0; i<scale; i++) { + str = [str stringByAppendingString:@"0"]; + } + return str; + }else{ + return str; + } + } + }else{ + return @""; + } +} + +NSComparisonResult StrNumCompare(id str1,id str2){ + return [NSDecimalNumber aDecimalNumberWithStringOrNumberOrDecimalNumber:str1 compareAnotherDecimalNumberWithStringOrNumberOrDecimalNumber:str2]; +} + +NSDecimalNumber *handlerDecimalNumber(id strOrNum,NSRoundingMode mode,int scale){ + if (!strOrNum) { + NSLog(@"������������������"); + return nil; + }else{ + NSDecimalNumber *one; + if ([strOrNum isKindOfClass:[NSString class]]) { + one = [NSDecimalNumber decimalNumberWithString:strOrNum]; + }else if([strOrNum isKindOfClass:[NSDecimalNumber class]]){ + one = strOrNum; + }else if ([strOrNum isKindOfClass:[NSNumber class]]){ + one = [NSDecimalNumber decimalNumberWithDecimal:[strOrNum decimalValue]]; + }else{ + NSLog(@"���������������������"); + return nil; + } + + NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:mode scale:scale raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO]; + return [one decimalNumberByRoundingAccordingToBehavior:handler]; + } +} + + +NSDecimalNumber *SNAdd(id strOrNum1,id strOrNum2){ + return [NSDecimalNumber aDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum1 type:Add anotherDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum2 andDecimalNumberHandler:nil]; +} + +NSDecimalNumber *SNSub(id strOrNum1,id strOrNum2){ + return [NSDecimalNumber aDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum1 type:Subtract anotherDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum2 andDecimalNumberHandler:nil]; +} +NSDecimalNumber *SNMul(id strOrNum1,id strOrNum2){ + return [NSDecimalNumber aDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum1 type:Multiply anotherDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum2 andDecimalNumberHandler:nil]; +} + +NSDecimalNumber *SNDiv(id strOrNum1,id strOrNum2){ + return [NSDecimalNumber aDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum1 type:Divide anotherDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum2 andDecimalNumberHandler:nil]; +} + +NSComparisonResult SNCompare(id strOrNum1,id strOrNum2){ + return [NSDecimalNumber aDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum1 compareAnotherDecimalNumberWithStringOrNumberOrDecimalNumber:strOrNum2]; +} + +NSDecimalNumber *SNMin(id strOrNum1,id strOrNum2){ + return SNCompare(strOrNum1, strOrNum2) > 0 ? strOrNum2 : strOrNum1; +} +NSDecimalNumber *SNMax(id strOrNum1,id strOrNum2){ + return SNCompare(strOrNum1, strOrNum2) > 0 ? strOrNum1 : strOrNum2; +} +NSDecimalNumber *SNAdd_handler(id strOrNum1,id strOrNum2,NSRoundingMode mode,int scale){ + return handlerDecimalNumber(SNAdd(strOrNum1, strOrNum2), mode, scale); +} +NSDecimalNumber *SNSub_handler(id strOrNum1,id strOrNum2,NSRoundingMode mode,int scale){ + return handlerDecimalNumber(SNSub(strOrNum1, strOrNum2), mode, scale); +} +NSDecimalNumber *SNMul_handler(id strOrNum1,id strOrNum2,NSRoundingMode mode,int scale){ + return handlerDecimalNumber(SNMul(strOrNum1, strOrNum2), mode, scale); +} +NSDecimalNumber *SNDiv_handler(id strOrNum1,id strOrNum2,NSRoundingMode mode,int scale){ + return handlerDecimalNumber(SNDiv(strOrNum1, strOrNum2), mode, scale); +} + + +NSDecimalNumber *SNMin_handler(id strOrNum1,id strOrNum2,NSRoundingMode mode,int scale){ + return handlerDecimalNumber(SNMin(strOrNum1, strOrNum2), mode, scale); +} +NSDecimalNumber *SNMax_handler(id strOrNum1,id strOrNum2,NSRoundingMode mode,int scale){ + return handlerDecimalNumber(SNMax(strOrNum1, strOrNum2), mode, scale); +} + +@end -- Gitblit v1.8.0