圆形数字均匀

时间:2012-06-15 19:58:18

标签: objective-c math ios5

如何根据对象C中的值向上或向下舍入数字。例如。

让我们说数字是143 - 我想要下降到140 但如果这个数字是146 - 我希望将其数量增加到150

有什么建议吗?

6 个答案:

答案 0 :(得分:7)

假设145应该舍入到150(这是科学和技术的标准),公式是:

x_rounded = ((x + 5)/10)*10;

更一般地说,当舍入到最近的n时,它是

x_rounded = ((x + n/2)/n)*n;

它来自整数除法总是向下舍入的事实。

对于负数,它稍微有些棘手。

编辑:也假设它是全部整数。使用浮点数/双精度数,更好地使用C数学库,因为除法的工作方式不同。像这样:

#include <math.h>

x_rounded = floor((x+5)/10) * 10;

答案 1 :(得分:1)

舍入值x到精度p,其中0 < p&lt;无穷。 (f.ex.p = 0.25,0.5,1,2,3,10,...)

float RoundTo(float x, float p)
{
  float y = 1/p;
  return int((x+(1/(y+y)))*y)/y;
}
float RoundUp(float x, float p)
{
  float y = 1/p;
  return int((x+(1/y))*y)/y;
}
float RoundDown(float x, float p)
{
  float y = 1/p;
  return int(x*y)/y;
}

答案 2 :(得分:0)

lround函数将浮点数舍入为最接近的整数。通过将数字除以10,四舍五入,然后乘以10,您可以相当容易地将其舍入为10的倍数。

代码:

10 * lround(x / 10.0);

答案 3 :(得分:0)

我认为最简单的解决方案是包含math.h并使用round()函数。

答案 4 :(得分:0)

要将浮点数舍入到附近的整数值,请查看C函数floorf(),ceilf()和roundf()。

为了将整数舍入到(比如),最接近10的倍数,Seva给出的公式应该有效...

答案 5 :(得分:0)

这肯定会解决您的后顾之忧。

- (int) roundToNearest5:(int) value
{
        
   return (value+(5-(value%5));
        
}
相关问题