浮點數(shù)計算會存在誤差
float:6-7位有效數(shù)
double:15-16位有效數(shù)
decimal:不是基礎(chǔ)數(shù)據(jù)類型,精確度非常高具體也不是很了解福荸,一般用作貨幣計算時使用。精度高對應(yīng)的消耗也大背传。
創(chuàng)建 NSDecimalNumber
[NSDecimalNumber zero] // 0
[NSDecimalNumber one] // 1
[NSDecimalNumber minimumDecimalNumber] // 超級小
[NSDecimalNumber maximumDecimalNumber] // 超級大
[NSDecimalNumber notANumber] // NaN
// 字符串 獲取
[NSDecimalNumber decimalNumberWithString:@"a111.111aa'11.11"] // 只獲取一個小數(shù)點,或者 NaN
// NSNumber 獲取
NSNumber *number1 = @12.456789;
NSDecimal decimal = [number1 decimalValue];
NSDecimalNumber *decimal2 = [[NSDecimalNumber alloc] initWithDecimal:decimal];
計算
注意計算要直接使用下面的方法径玖,不要先轉(zhuǎn)換成double 或者其他計算颤介。
NSDecimalNumber *add = [decimal1 decimalNumberByAdding:decimal2];// 加
NSDecimalNumber *substract = [decimal1 decimalNumberBySubtracting:decimal2];// 減
NSDecimalNumber *multiply = [decimal1 decimalNumberByMultiplyingBy:decimal2];// 乘
NSDecimalNumber *divid = [decimal1 decimalNumberByDividingBy:decimal2];// 除
NSDecimalNumber *rais = [decimal1 decimalNumberByRaisingToPower:3];// decimal1 的 power次方
NSDecimalNumber *multiplyPower10 = [decimal1 decimalNumberByMultiplyingByPowerOf10:3];// decimal1 乘 10 的 power次方
調(diào)整有效位數(shù)
// 有效數(shù)調(diào)整:scale:小數(shù)位數(shù)滚朵。 其他參數(shù):都是異常處理 YES 返回異常! NO 忽略
NSDecimalNumberHandler *hander = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundPlain
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:YES];
// 例如 計算是就處理
NSDecimalNumber *aaaa = [decimal1 decimalNumberByMultiplyingBy:decimal2 withBehavior:hander];
// 或者 直接處理
NSDecimalNumber *decimal3 = [decimal1 decimalNumberByRoundingAccordingToBehavior:hander];
轉(zhuǎn)換
NSDecimal newDecimal = [decimal1 decimalValue];
NSString *newString = [decimal1 stringValue];
double newDouble = [decimal1 doubleValue];
NSDecimal 類
其他
1