たとえば、オブジェクト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;
これは、整数の除算が常に切り捨てられるという事実に由来しています。
負の数の場合は、少し注意が必要です。
編集:また、それがすべて整数であると仮定します。float / doubleの場合、除算の動作が異なるため、C数学ライブラリを使用することをお勧めします。このような:
#include <math.h>
x_rounded = floor((x+5)/10) * 10;
値 x を精度 p に丸めます。ここで、0 < p < 無限大です。(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;
}
このlround
関数は、floatを最も近い整数に丸めます。数値を10で除算し、丸めてから10を掛けることで、10の倍数にかなり簡単に丸めることができます。
コードで:
10 * lround(x / 10.0);
最も簡単な解決策は、math.h を含めて round() 関数を使用することだと思います。
これであなたの悩みはきっと解決します。
- (int) roundToNearest5:(int) value
{
return (value+(5-(value%5));
}
float を近い整数値に丸めるには、C 関数 floorf()、ceilf()、roundf() を調べてください。
整数を (たとえば) 最も近い 10 の倍数に丸めるには、Seva によって与えられた式が機能するはずです...