1. 程式人生 > >iOS 浮點型四捨五入精確值問題

iOS 浮點型四捨五入精確值問題

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 具體的詳細用法請戳 /*
    
暫時就這麼點,