1

我使用 NSDecimal 是因为我必须为我的应用程序存储非常大的值。我希望能够使用 NSDecimalDivide 函数来划分两个 NSDecimal 并将结果四舍五入到最接近的整数。

    NSDecimal testOne = [[NSDecimalNumber decimalNumberWithString:@"1064"] decimalValue];
    NSDecimal cost = [[NSDecimalNumber    decimalNumberWithString:@"10"]decimalValue];
    NSDecimal value;
    NSDecimalDivide(&value, &testOne, &cost, NSRoundDown);
    NSString *string = NSDecimalString(&value, _usLocale);
    NSLog(@"Here is the cost%@",string);

这输出 106.4 我希望它输出 106。有谁知道如何将 NSDecimal 数字四舍五入为整数值?

4

2 回答 2

4

将 NSDecimal 包装为 NSDecimalNumber 并使用decimalNumberByRoundingAccordingToBehavior:. 这使您可以指定所需的精确舍入行为

于 2016-03-25T18:41:18.033 回答
3

一种可能的方法是使用NSDecimalNumberHandlerwith scaleset to 0

NSDecimalNumber *number1 = [NSDecimalNumber decimalNumberWithString:@"1064"];
NSDecimalNumber *number2 = [NSDecimalNumber decimalNumberWithString:@"10"];

NSDecimalNumberHandler *behavior = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundDown
                                                                                  scale:0
                                                                       raiseOnExactness:NO
                                                                        raiseOnOverflow:NO
                                                                       raiseOnUnderflow:NO
                                                                    raiseOnDivideByZero:YES];

NSDecimalNumber *result = [number1 decimalNumberByDividingBy:number2 withBehavior:behavior];

NSLog(@"Here is the cost %@", result);

请注意,我根本没有使用原语NSDecimal,我也会建议您这样做。

但是,如果您想NSDecimal直接使用,可以使用方便的NSDecimalRound功能。

于 2016-03-25T18:47:53.280 回答