iOS NSDecimalNumber 精度计算

441 阅读1分钟
  • NSDecimalNumber
NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:@"0.123"]; // 0.123
  • NSDecimalNumberHandler
// scale 保留小数位数
NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:3 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
  • 相关操作
NSDecimalNumber *firstNumber = [NSDecimalNumber decimalNumberWithString:@"321.123"];
NSDecimalNumber *secondNumber = [NSDecimalNumber decimalNumberWithString:@"123.123"];

// 加法计算
NSDecimalNumber *sumNumber = [firstNumber decimalNumberByAdding:secondNumber];
NSLog(@"%@",sumNumber); //444.246
NSDecimalNumber *resultNumber = [firstNumber decimalNumberByAdding:secondNumber withBehavior:handler];
NSLog(@"%@",resultNumber);  //444.246

// 减法计算
NSDecimalNumber *subNumber = [firstNumber decimalNumberBySubtracting:secondNumber];
NSLog(@"%@",subNumber); // 198
NSDecimalNumber *subResultNumber = [firstNumber decimalNumberBySubtracting:secondNumber withBehavior:handler];
NSLog(@"%@",subResultNumber); // 198

// 乘法计算
NSDecimalNumber *mulNumber = [firstNumber decimalNumberByMultiplyingBy:secondNumber];
NSLog(@"%@",mulNumber); // 39537.627129
NSDecimalNumber *mulResultNumber = [firstNumber decimalNumberByMultiplyingBy:secondNumber withBehavior:handler];
NSLog(@"%@",mulResultNumber); //39537.627

// 除法计算
NSDecimalNumber *dividNumber = [firstNumber decimalNumberByDividingBy:secondNumber];
NSLog(@"%@",dividNumber); // 2.608147949611364
NSDecimalNumber *dividResultNumber = [firstNumber decimalNumberByDividingBy:secondNumber withBehavior:handler];
NSLog(@"%@",dividResultNumber); // 2.608