NSDecimalNumber四舍五入

时间:2015-06-10 11:49:07

标签: ios objective-c

我想用这样的十进制数:

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 个答案:

答案 0 :(得分:1)

我在你的代码中看到了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];

答案 1 :(得分:-1)

这是最简单的方法: float f = 4363,65; int rounded =(f + 0.5);