簡體   English   中英

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

[英]iOS : round off to nearest number

可以說我一直在關注NSInteger的:

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

是否有一個函數可以像這些數字一樣轉換(四舍五入):

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

查看您請求的結果,將小於100的數字四舍五入到最接近的5,將超過100的數字四舍五入到最接近的10。這樣,您可以獲得所需的結果

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

//此泛型函數可以解決您可以根據需要對其進行修改的目的。

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

可能自己更容易實現:

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

你應該用

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

為什么不使用更通用,因此可重用的方法? 這似乎適用於所有有效的NSInteger,包括負數和div0檢查,但有人讓我知道它們是否發現缺陷:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM