繁体   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