在開發中,遇到和貨幣價格計算相關的問題時,需要注意計算的精度。在使用float類型運算,會出現精度丟失問題。可使用NSDecimalNumber。
NSDecimalNumber *a = [NSDecimalNumber decimalNumberWithString:@"93.891"];
NSDecimalNumber *b = [NSDecimalNumber decimalNumberWithString:@"8.764"];
1.加法
//不進行四捨五入
NSDecimalNumber *num = [a decimalNumberByAdding:b];
//四捨五入
//NSRoundUp屬性使所有的操作算到最近的位置,其他的進位選項是NSRoundPlain, NSRoundDown, 和 NSRoundBankers,它們都被定義在NSRoundingMode,scale參數定義了結果值保留的小數位的數量,其餘的參數給所有的操作定義了異常處理行爲.
NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
NSDecimalNumber *num = [a decimalNumberByAdding:b withBehavior:roundUp];
2.減法
NSDecimalNumber *num = [a decimalNumberBySubtracting:b];
3.乘法
NSDecimalNumber *num = [a decimalNumberByMultiplyingBy:b];
3.除法
NSDecimalNumber *num = [a decimalNumberByDividingBy:b];