在iOS開發(fā)中,進場遇到貨幣價格相關的計算,這是我們需要注意計算精度的問題。使用float類型運算,經常出現(xiàn)誤差,為了解決這個問題我們使用NSDecimalNumber,下面通過例子的形式說明一下:
運算方法:
+ (void)test1
{
??? //不進行四舍五入
??? NSDecimalNumber *number1 = [NSDecimalNumber decimalNumberWithString:@"3.155"];
??? NSDecimalNumber *number2 = [NSDecimalNumber decimalNumberWithString:@"6.1"];
??? //加法
??? NSDecimalNumber * addNum = [number1 decimalNumberByAdding:number2];
??? NSLog(@"11------->>>>? num=%@",addNum);
???
??? //進行四舍五入
//??? NSRoundUp 屬性使所有的操作算到最接近的位置,其他的進位選項是 NSRoundPlain,NSRoundDown 和 NSRoundBankers ,他們被定義在NSRoundingMode,scale參數(shù)定義了結果值保留的小數(shù)位的數(shù)量,其余的參數(shù)給所有的操作定義了一場處理行為。
??? //scale 四舍五入,舍入位數(shù)
??? NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
??? addNum = [number1 decimalNumberByAdding:number2 withBehavior:roundUp];
??? NSLog(@"11------->>>>? num=%@",addNum);
???
??? //減法
??? NSDecimalNumber * subtractNum = [number1 decimalNumberByAdding:number2];
??? NSLog(@"22------->>>>? num=%@",subtractNum);
???
??? //進行四舍五入
??? subtractNum = [number1 decimalNumberBySubtracting:number2 withBehavior:roundUp];
??? NSLog(@"22------->>>>? num=%@",subtractNum);
???
??? //乘法
??? NSDecimalNumber * multiplyNum = [number1 decimalNumberByMultiplyingBy:number2];
??? NSLog(@"33------->>>>? num=%@",multiplyNum);
???
??? //進行四舍五入
??? multiplyNum = [number1 decimalNumberByMultiplyingBy:number2 withBehavior:roundUp];
??? NSLog(@"33------->>>>? num=%@",multiplyNum);
???
??? //除法
??? NSDecimalNumber * divideNum = [number1 decimalNumberByDividingBy:number2];
??? NSLog(@"44------->>>>? num=%@",divideNum);
???
??? divideNum = [number1 decimalNumberByDividingBy:number2 withBehavior:roundUp];
??? NSLog(@"44------->>>>? num=%@",divideNum);
}