Ios 小数舍入

Ios 小数舍入,ios,objective-c,Ios,Objective C,我想把十进制数四舍五入如下: 4363,65-->4364 我试过这个: NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString@"4363,65"]; NSDecimalNumberHandler *behav = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundPlain scale:NSDecimalNoScale

我想把十进制数四舍五入如下:

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];

我没有预期的结果。我如何舍入它?

我发现您的代码中有两个问题。第一个是数字的创建。您正在使用,作为十进制分隔符。如果您的语言环境未配置为使用小数,则您的数字将被解析为4363。这就是可能发生的情况

第二个问题是“比例”参数的值。它接受十进制数字的数量,但您使用的是一个常数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];
这是最简单的方法: 浮点数f=4363,65;
整数四舍五入=f+0.5

你的结果是什么?你的地区是什么?您正在使用,作为十进制分隔符。原始的小数解析正确吗?结果是:4363强制使用a或更改协议以可靠解析数字。我想这样做,将小数转换为您的答案。我的错误是你说的区域设置和比例