我想用这样的十进制数:
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];
我没有预期的结果。我怎么能围绕它?
答案 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);