Ios 小数舍入
我想把十进制数四舍五入如下: 4363,65-->4364 我试过这个:Ios 小数舍入,ios,objective-c,Ios,Objective C,我想把十进制数四舍五入如下: 4363,65-->4364 我试过这个: NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString@"4363,65"]; NSDecimalNumberHandler *behav = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundPlain scale:NSDecimalNoScale
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或更改协议以可靠解析数字。我想这样做,将小数转换为您的答案。我的错误是你说的区域设置和比例