例如,如何根据对象 C.. 中的值向上或向下舍入数字。
假设数字是 143 - 我想四舍五入到 140,但如果数字是 146 - 我想四舍五入到 150
有什么建议么?
例如,如何根据对象 C.. 中的值向上或向下舍入数字。
假设数字是 143 - 我想四舍五入到 140,但如果数字是 146 - 我想四舍五入到 150
有什么建议么?
假设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;
将值 x 舍入为精度 p,其中 0 < p < 无穷大。(例如 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;
}
该lround
函数会将浮点数舍入到最接近的整数。通过将数字除以 10、四舍五入,然后乘以 10,您可以很容易地将其四舍五入到 10 的倍数。
在代码中:
10 * lround(x / 10.0);
我认为最简单的解决方案是包含 math.h 并使用 round() 函数。
要将浮点数舍入到附近的整数值,请查看 C 函数 floorf()、ceilf() 和 roundf()。
要将整数舍入到(比如说)最接近的十的倍数,Seva 给出的公式应该可以工作......
这绝对可以解决您的后顾之忧。
- (int) roundToNearest5:(int) value
{
return (value+(5-(value%5));
}