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