如何根据对象C中的值向上或向下舍入数字。例如。
让我们说数字是143 - 我想要下降到140 但如果这个数字是146 - 我希望将其数量增加到150
有什么建议吗?
答案 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));
}