Objective-C 精確計算

來源:互聯網
上載者:User

標籤:

在iOS中需要精確計算時,double, float類型往往會出現不可預料的問題:

  在調試過程中可以看到 doule 類型 d3 在計算過程中值不是預計的9999.99。

  如果在要用中計算涉及到金額等重要資料,不建議使用這種不可控結果的方式,可以採用iOS提供的另外一種支援準確精度計算的資料類型 NSDecimalNumber.

  NSDecimalNumber是NSNumber的子類,比NSNumber的功能更為強大,可以指定一個數的冪,四捨五入等操作。由於NSDecimalNumber精度較高,所以會比基礎資料型別 (Elementary Data Type)費時,所以需要權衡考慮,蘋果官方建議在貨幣以及要求精度很高的情境下使用。

  所有NSDecimalNumber對象是不可變的,這意味著已經被建立後不能改變它們的值。

- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;

 

NSDecimalNumberBehaviors對象可以通過下述方法建立

NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler                                       decimalNumberHandlerWithRoundingMode:NSRoundBankers                                       scale:2                                       raiseOnExactness:NO                                       raiseOnOverflow:NO                                       raiseOnUnderflow:NO                                       raiseOnDivideByZero:YES];

  scale代表保留小數點後幾位

  枚舉,

    NSRoundPlain,   // Round up on a tie //貌似取整     NSRoundDown,    // Always down == truncate  //只舍不入    NSRoundUp,      // Always up    // 只入不舍    NSRoundBankers  // on a tie round so last digit is even  貌似四捨五入

  

 

Objective-C 精確計算

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.