美文网首页
NSDecimal工具类

NSDecimal工具类

作者: 时光浅影 | 来源:发表于2019-04-08 11:36 被阅读0次
@interface CalculationTool : NSObject
/*
 NSDecimalNumber的简单加减乘除法,保证精确度问题
 */
//MARK:--NSDecimalNumber加法
+(NSString *)addForNumber1:(NSString *)number1 withNumber2:(NSString *)number2;
//MARK:--NSDecimalNumber减法
+(NSString *)subtractionForNumber1:(NSString *)number1 withNumber2:(NSString *)number2;
//MARK:--NSDecimalNumber乘法
+(NSString *)multiplicationForNumber1:(NSString *)number1 withNumber2:(NSString *)number2;
//MARK:--NSDecimalNumber除法
+(NSString *)divisionForNumber1:(NSString *)number1 withNumber2:(NSString *)number2;
//MARK:--NSDecimalNumber次方
+(NSString *)powerForNumber1:(NSString *)number1 withPower:(NSInteger)power;
//MARK:-- 保留精确度
+ (NSString *)precisionDecimalWithString:(NSString *)decimalStr scale:(int)scale;
+ (NSString *)precisionDecimalWithString:(NSString *)decimalStr scale:(int)scale removeDot:(BOOL)removeDot;
@end
#import "CalculationTool.h"

@implementation CalculationTool
//MARK:--NSDecimalNumber加法
+(NSString *)addForNumber1:(NSString *)number1 withNumber2:(NSString *)number2{
    if (!number1) {
        number1 = @"0";
    }
    if (!number2) {
        number2 = @"0";
    }
    NSDecimalNumber *number11 = [NSDecimalNumber decimalNumberWithString:number1];
    NSDecimalNumber *number22 = [NSDecimalNumber decimalNumberWithString:number2];
    NSDecimalNumber *numberTotal = [number11 decimalNumberByAdding:number22];
    NSString *numberTotalStr = [NSString stringWithFormat:@"%@",numberTotal];
    return numberTotalStr;
}
//MARK:--NSDecimalNumber减法
+(NSString *)subtractionForNumber1:(NSString *)number1 withNumber2:(NSString *)number2{
    if (!number1) {
        number1 = @"0";
    }
    if (!number2) {
        number2 = @"0";
    }
    NSDecimalNumber *number11 = [NSDecimalNumber decimalNumberWithString:number1];
    NSDecimalNumber *number22 = [NSDecimalNumber decimalNumberWithString:number2];
    NSDecimalNumber *numberTotal = [number11 decimalNumberBySubtracting:number22];
    NSString *numberTotalStr = [NSString stringWithFormat:@"%@",numberTotal];
    return numberTotalStr;
}
//MARK:--NSDecimalNumber乘法
+(NSString *)multiplicationForNumber1:(NSString *)number1 withNumber2:(NSString *)number2{
    if (!number1) {
        number1 = @"0";
    }
    if (!number2) {
        number2 = @"0";
    }
    NSDecimalNumber *number11 = [NSDecimalNumber decimalNumberWithString:number1];
    NSDecimalNumber *number22 = [NSDecimalNumber decimalNumberWithString:number2];
    NSDecimalNumber *numberTotal = [number11 decimalNumberByMultiplyingBy:number22];
    NSString *numberTotalStr = [NSString stringWithFormat:@"%@",numberTotal];
    return numberTotalStr;
}
//MARK:--NSDecimalNumber除法
+(NSString *)divisionForNumber1:(NSString *)number1 withNumber2:(NSString *)number2{
    if (!number1) {
        number1 = @"0";
    }
    if (!number2 | [number2 isEqualToString:@"0"]) {
        number2 = @"1";
    }
    NSDecimalNumber *number11 = [NSDecimalNumber decimalNumberWithString:number1];
    NSDecimalNumber *number22 = [NSDecimalNumber decimalNumberWithString:number2];
    NSDecimalNumber *numberTotal = [number11 decimalNumberByDividingBy:number22];
    NSString *numberTotalStr = [NSString stringWithFormat:@"%@",numberTotal];
    return numberTotalStr;
}
//MARK:--NSDecimalNumber次方
+(NSString *)powerForNumber1:(NSString *)number1 withPower:(NSInteger)power{
    if (!number1) {
        number1 = @"0";
    }
    if (!power) {
        power = 1;
    }
    NSDecimalNumber *number11 = [NSDecimalNumber decimalNumberWithString:number1];
    NSDecimalNumber *numberTotal = [number11 decimalNumberByRaisingToPower:power];
    NSString *numberTotalStr = [NSString stringWithFormat:@"%@",numberTotal];
    return numberTotalStr;
}
+ (NSString *)precisionDecimalWithString:(NSString *)decimalStr scale:(int)scale removeDot:(BOOL)removeDot{
    NSString * calculate= [self precisionDecimalWithString:decimalStr scale:scale];
    NSMutableString *appendStr = [NSMutableString stringWithString:calculate];
    
    if (![calculate containsString:@"."]) {
        [appendStr appendString:@"."];
    }
    NSString * dotSuffix = [appendStr componentsSeparatedByString:@"."].lastObject;
    NSInteger count = scale - dotSuffix.length;
    for (NSInteger i = 0; i < count; i++) {
        [appendStr appendString:@"0"];
    }
    if (removeDot) {
      
        return calculate;
        
    }else{
       return appendStr;
    }
    
}
//MARK:--取精度 只舍不入
+ (NSString *)precisionDecimalWithString:(NSString *)decimalStr scale:(int)scale{
    // 有效数调整:scale:小数位数。 其他参数:都是异常处理 YES 返回异常! NO 忽略
    NSDecimalNumberHandler *handler = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundDown
                                                                                    scale:scale
                                                                         raiseOnExactness:NO
                                                                          raiseOnOverflow:NO
                                                                         raiseOnUnderflow:NO
                                                                      raiseOnDivideByZero:YES];
    NSDecimalNumber *decimal = [NSDecimalNumber decimalNumberWithString:decimalStr];
    NSDecimalNumber *precisionDecimal = [decimal decimalNumberByRoundingAccordingToBehavior:handler];
    NSString *calculate = precisionDecimal.stringValue;
    return calculate;
    
}

相关文章

网友评论

      本文标题:NSDecimal工具类

      本文链接:https://www.haomeiwen.com/subject/wuruiqtx.html