【问题标题】:Round division to upper integer四舍五入到上整数
【发布时间】:2011-03-11 19:53:07
【问题描述】:

有没有一种简单的方法可以将除法的结果四舍五入到大整数?

我想要这个:

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 的东西吗?

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

提前致谢!

【问题讨论】:

    标签: iphone integer numbers rounding


    【解决方案1】:
    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】:

      您使用 math.h 中可用的标准 ceil()ceilf() 函数

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          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];
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-12
            • 2011-03-21
            相关资源
            最近更新 更多