用C对整数进行四舍五入

用C对整数进行四舍五入,c,rounding,C,Rounding,我有一个整数中的数字00-59,我想把它四舍五入到5,例如06是5,08是10。哦,07也是10。我该怎么做呢 这不是C语言特有的,但想法是一样的: func roundToNearest(num someNumber, num roundToNearest) { return (round(someNumber / roundToNearest) * roundToNearest); } 当然,这只是伪代码,在使用C的情况下,您需要将其转换为singles才能从中获得有用的东西 在c

我有一个整数中的数字00-59,我想把它四舍五入到5,例如06是5,08是10。哦,07也是10。我该怎么做呢

这不是C语言特有的,但想法是一样的:

func roundToNearest(num someNumber, num roundToNearest)
{
    return (round(someNumber / roundToNearest) * roundToNearest);
}
当然,这只是伪代码,在使用C的情况下,您需要将其转换为singles才能从中获得有用的东西


在c的例子中,round来自math.h

如果您愿意深入研究浮点领域,您可以这样做:

int rounded = (int)(round((float)input / 5) * 5);

确保你包括。请参阅。

查找表如何


整数分钟[60]={0,0,0,5,5,5,5,10,10,10,…}

您可以使用以下代码

int round_5(int num)
{
   int t1;
   t1= num%5;
   if(t1>=2)
      num+=(5-t1);
   else
      num-=t1;
   return num;
}


main()
{
   int num = 57;
   num = round_5(num);
   printf("%d",num);
   return 0;
}

希望这能有所帮助。

如果您想编写自己的轮函数,以下是一些应该可以使用的方法:

int round(int number, int round_by)
{
    int whole = number / round_by;
    char superior = ((number % round_by) >= (round_by / 2)) ? 1 : 0;
    return (whole + superior) * round_by;
}

int main()
{
    printf("%d\n", round(6, 5)); // 5
    printf("%d\n", round(7, 5)); // 10
    printf("%d\n", round(8, 5)); // 10
    printf("%d\n", round(33, 10)); // 30
    printf("%d\n", round(33, 5)); // 35
}
unsigned int round5(unsigned int n)
{
    return ((n + 2) / 5) * 5;
}
您可以用所需的每个数字替换5。

这应该可以:

int round(int number, int round_by)
{
    int whole = number / round_by;
    char superior = ((number % round_by) >= (round_by / 2)) ? 1 : 0;
    return (whole + superior) * round_by;
}

int main()
{
    printf("%d\n", round(6, 5)); // 5
    printf("%d\n", round(7, 5)); // 10
    printf("%d\n", round(8, 5)); // 10
    printf("%d\n", round(33, 10)); // 30
    printf("%d\n", round(33, 5)); // 35
}
unsigned int round5(unsigned int n)
{
    return ((n + 2) / 5) * 5;
}
如果你想把7四舍五入,就说+3,尽管这看起来不自然。

使用公式

rounded = (number / 5) * 5;
if ((number % 5) > 1)
  rounded += 5;

您可以使用以下代码:

//no -> number  ro -> round off to
//ro = 5 in your case
int no, ro;
if(no%ro >= 2)
    no = ((no/ro)+1)*ro;
else
    no = (no/ro)*ro;

希望能有帮助

会有帮助吗?写一个小的for-loop/if语句来计算模,然后从那里开始计算。7->10将是一个ceil操作,但这意味着6也将变成10。当四舍五入到最接近的5时,7.5将是应该变为10的最低数字。除了07的情况外,将四舍五入1.4=>1=>5,而不是OP问的10。OP的问题是错误的,7->10将是ceil操作,但这意味着6也变为10。当四舍五入到最接近的5时,7.5将是应该变成10的最低数字。OP的问题正是他想要的,不是吗?这是他的电话,他从来没有提到过天花板或地板;他说是圆。右-7到最近的5不是10,而是5。根据定义,圆是到最近的,除非你指定一个方向。您可以向上取整、向下取整或向最近的取整。OP给出的数字与这两个都不符,因此要么他的数学完全错误,要么他没有充分解释他想要什么。除了07的情况外,将按OP的要求取整1.4=>1=>5,而不是10。是的,这是一种奇怪的要求,因为7比10更接近5。但如果这是要求,那么可以用输入+1替换输入。你错过了一个?在你的三元组中,这只是在做rounda/by*by,并不能满足OP对7->10@Eregrith谢谢,我编辑了我的答案,现在是7,也是10,即使我不明白为什么应该是10。。。我正在编程一个只有5分钟分辨率的文字时钟,所以我宁愿让它向上取整也不要向下取整。这段代码甚至都不能正常工作。您的代码生成以下结果:7->6,8->6,9->6。在发布解决方案之前,您可能需要先测试它。是的,我确实忘记了重要的部分*5。这是正确的。