簡體   English   中英

NSDecimalNumber舍入

[英]NSDecimalNumber rounding

我會四舍五入像這樣的十進制數:

4363,65 ----> 4364

我已經試過了:

NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString@"4363,65"];

NSDecimalNumberHandler  *behav = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundPlain scale:NSDecimalNoScale
                                                raiseOnExactness:YES
                                                 raiseOnOverflow:YES
                                                raiseOnUnderflow:YES
                                             raiseOnDivideByZero:YES];

NSDecimalNumber *roundedDecimal = [decimalNumber decimalNumberByRoundingAccordingToBehavior:behav];

我沒有預期的結果。我該如何取整?

我在您的代碼中看到2個問題。 首先是數字的創建。 您正在使用,作為小數點分隔符。 如果您的語言環境未配置為使用,對於十進制,您的數字將被解析為4363 這可能會發生。

第二個問題是scale參數的值。 它使用十進制數字,但是您使用的是常量NSDecimalNoScale ,它實際上等於SHRT_MAX 那不是你想要的。

//make sure you use the correct format depending on your locale
NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:@"4363.65"]; 

NSDecimalNumberHandler  *behav = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundPlain
                                                       scale:0
                                            raiseOnExactness:YES
                                             raiseOnOverflow:YES
                                            raiseOnUnderflow:YES
                                         raiseOnDivideByZero:YES];

這是最簡單的方法:float f = 4363,65; 整數舍入=(f + 0.5);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM