iOS:四舍五入到最接近的数字

时间:2014-09-30 10:03:12

标签: ios numbers rounding

让我说我跟随NSInteger

  • 111
  • 246
  • 99
  • 82
  • 92
  • 85

是否有像这些数字一样转换(四舍五入)的函数,如:

  • 110
  • 250
  • 100
  • 80
  • 90
  • 85

5 个答案:

答案 0 :(得分:2)

查看您要求的结果,小于100的数字四舍五入到最接近的5,并且那些数字四舍五入到最接近的10.通过这样做,您可以得到所需的结果

- (NSInteger)roundToNearest:(NSInteger)inputNum
{
    if (inputNum < 100){
        return roundf(inputNum / 5.0f) * 5;
    }
    else {
        return roundf(inputNum / 10.0f) * 10;
    }
}

答案 1 :(得分:1)

//此通用功能可以解决您根据需要修改它的目的。

- (NSInteger)roundOffNumberToNearestCompleteNo:(NSInteger)number
{
    if(number <= 0)
        return 0;

    NSString *strNumber = [NSString stringWithFormat:@"%ld",number];

    NSInteger digitCount = [strNumber length];

    if(digitCount == 1)
    {
        if(number <= 5)
        {
            return 1;
        }
        else
        {
            return 10;
        }
    }

    NSString *strNumberUnit = @"1";

    for(int i = 1; i < digitCount; i++)
    {
        strNumberUnit = [strNumberUnit stringByAppendingString:@"0"];
    }

    NSInteger numberUnit = [strNumberUnit integerValue];

    NSInteger reminder = number%numberUnit;

    if(reminder <= (numberUnit/2))
    {
        number = number -  reminder;
    }
    else
    {
        number = number + (numberUnit - reminder);
    }

    return number;
}

答案 2 :(得分:0)

可能更容易自己实现:

- (NSInteger)roundOff:(NSInteger)number
{
    NSInteger remainder = number % 5;
    NSInteger quotient = number / 5;
    if (remainder > 0) {
        return (quotient + 1) * 5;
    }
    else {
        return quotient * 5;
    }
}

答案 3 :(得分:0)

你应该使用

- (NSInteger)roundFive:(NSInteger)number
{
   return roundf(number/5.)*5;
}

答案 4 :(得分:0)

为什么不使用更通用且可重复使用的方法?这似乎适用于所有有效的NSIntegers,包括负数和div0的检查,但有人让我知道他们是否发现了一个缺陷:

- (NSInteger)roundInteger:(NSInteger)num toNearestInteger:(NSInteger)roundTo
{
    if (!roundTo) { return 0; }
    return (roundTo * round((float)num / roundTo));
}