iOS 浮點型四捨五入精確值問題
阿新 • • 發佈:2019-02-03
NSDecimalNumber *numberB = [NSDecimalNumber
decimalNumberWithString:strB];
/// 這裡不僅包含Multiply還有加 減 除。 NSDecimalNumber *numResult = [numberA decimalNumberByMultiplyingBy:numberB];
NSString *strResult = [numResult stringValue];
NSLog(@"NSDecimalNumber method unrounding = %@",strResult);
///
如果要四捨五入的話還要使用另一個類 NSDecimalNumberHandler /*
講述下引數的含義:
RoundingMode: 簡單講就是你要四捨五入操作的標準.
// 原始資料
// 值 1.2 1.21 1.25 1.35 1.27
各個model轉換後的值
// Plain 1.2 1.2 1.3 1.4 1.3
// Down 1.2 1.2 1.2 1.3 1.2
// Up 1.2 1.3 1.3 1.4 1.3
// Bankers 1.2 1.2 1.2 1.4 1.3
scale : 需要保留的精度。
raiseOnExactness : 為YES時在處理精確時如果有錯誤,就會丟擲異常。
raiseOnOverflow : YES時在計算精度向上溢位時會丟擲異常,否則返回。
raiseOnUnderflow : YES時在計算精度向下溢位時會丟擲異常,否則返回.
raiseOnDivideByZero : YES時。當除以0時會丟擲異常,否則返回。
*/ NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode :NSRoundPlain
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:NO];
NSString *tempStr =[[numResult decimalNumberByRoundingAccordingToBehavior:roundingBehavior] stringValue];
NSLog(@"NSDecimalNumber method rounding = %@",tempStr);
/// ps。計算的結果如果小數的位數不到你的要求精度。系統不會自動新增“0”,需自行處理 如使用者需要小數點後兩位小數但計算結果為142.5時。如需後面補“0”需使用者自己新增 /*
這裡主要就展示下怎麼使用 NSDecimalNumber 具體的詳細用法請戳 /*
暫時就這麼點,
/// 這裡不僅包含Multiply還有加 減 除。 NSDecimalNumber *numResult = [numberA decimalNumberByMultiplyingBy:numberB];
NSString *strResult = [numResult stringValue];
NSLog(@"NSDecimalNumber method unrounding = %@",strResult);
講述下引數的含義:
RoundingMode: 簡單講就是你要四捨五入操作的標準.
// 原始資料
// 值 1.2 1.21 1.25 1.35 1.27
各個model轉換後的值
// Plain 1.2 1.2 1.3 1.4 1.3
// Down 1.2 1.2 1.2 1.3 1.2
// Up 1.2 1.3 1.3 1.4 1.3
// Bankers 1.2 1.2 1.2 1.4 1.3
scale :
raiseOnExactness : 為YES時在處理精確時如果有錯誤,就會丟擲異常。
raiseOnOverflow : YES時在計算精度向上溢位時會丟擲異常,否則返回。
raiseOnUnderflow : YES時在計算精度向下溢位時會丟擲異常,否則返回.
raiseOnDivideByZero : YES時。當除以0時會丟擲異常,否則返回。
*/ NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode
NSString *tempStr =[[numResult decimalNumberByRoundingAccordingToBehavior:roundingBehavior] stringValue];
NSLog(@"NSDecimalNumber method rounding = %@",tempStr);
/// ps。計算的結果如果小數的位數不到你的要求精度。系統不會自動新增“0”,需自行處理 如使用者需要小數點後兩位小數但計算結果為142.5時。如需後面補“0”需使用者自己新增 /*
這裡主要就展示下怎麼使用 NSDecimalNumber 具體的詳細用法請戳 /*
暫時就這麼點,