舍入到上整数

时间:2010-07-05 08:55:01

标签: iphone integer numbers rounding

有一种简单的方法可以将除法结果舍入为大整数吗?

我想有这个:

18/20 -> 1
19/20 -> 1
20/20 -> 1
21/20 -> 2
22/20 -> 2
23/20 -> 2

......等等......

38/20 -> 2
39/20 -> 2
40/20 -> 2
41/20 -> 3
42/20 -> 3
43/20 -> 3

我必须管理NSNumberFormatter的东西吗?

我没有成功获得一个整数值,并进行整数比较。

提前致谢!

4 个答案:

答案 0 :(得分:2)

您使用了math.h

中提供的标准ceil()ceilf()函数

答案 1 :(得分:2)

int x, y;
int result = (x + (y-1)) / y;

测试:

    int n = 20;
    for (int i = 1; i <= 50; i++) {         
        NSLog(@"%d+(%d-1) / %d = %d", i, n, n, (i+(n-1))/n);
    }

答案 2 :(得分:0)

标准C支持double ceil(double x)long double ceill(long double x)。也许iPhone有这些?如果你的数据首先是整数,那么你要么必须找到一个聪明的技巧,要么首先将你的整数转换为双数。

答案 3 :(得分:0)

在数字和字符串之间进行转换时使用

NSNumberFormatter。除了已经提到的基元的c函数之外,您还可以使用NSDecimalNumberNSDecimalNumberHandler来执行NSNumber的给定实例的计算和舍入。如有疑问,请参阅文档。 Number and Value Programming Guide

要划分的示例代码,向上舍入到下一个整数并显示结果。

NSDecimalNumber *denominator = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInteger:20] decimalValue]];

NSDecimalNumberHandler *numberHandler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundUp scale:0 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];

for (NSInteger counter = 1; counter <= 50; counter++) {

    NSDecimalNumber *numerator = [NSDecimalNumber decimalNumberWithDecimal:[[NSNumber numberWithInteger:counter] decimalValue]];

    NSDecimalNumber *result = [[numerator decimalNumberByDividingBy:denominator withBehavior:numberHandler] retain];

    NSLog(@"%@/%@ -> %d", numerator, denominator, [result integerValue]);

    [result release];
}