両方の方法で、価格を丸める方法を見つけようとしています。例えば:
Round down
43 becomes 40
143 becomes 140
1433 becomes 1430
Round up
43 becomes 50
143 becomes 150
1433 becomes 1440
次のような価格帯がある状況があります。
£143 - £193
そのうち私が見せたいのは:
£140 - £200
とてもきれいに見えるので
これを達成する方法についてのアイデアはありますか?
いくつかのメソッドを作成するだけです。
int RoundUp(int toRound)
{
if (toRound % 10 == 0) return toRound;
return (10 - toRound % 10) + toRound;
}
int RoundDown(int toRound)
{
return toRound - toRound % 10;
}
Modulusは、10 - r
は、最も近い10分の1に移動し、rを減算するだけで切り捨てます。かなり簡単です。
モジュラス(%)または浮動小数点を使用する必要はありません...
これは動作します:
public static int RoundUp(int value)
{
return 10*((value + 9)/10);
}
public static int RoundDown(int value)
{
return 10*(value/10);
}
このコードは、最も近い10の倍数に丸めます。
int RoundNum(int num)
{
int rem = num % 10;
return rem >= 5 ? (num - rem + 10) : (num - rem);
}
非常に簡単な使用法:
Console.WriteLine(RoundNum(143)); // prints 140
Console.WriteLine(RoundNum(193)); // prints 190
数値を別の数値の倍数に丸める一般的な方法、丸め ゼロから離れる 。
整数の場合
int RoundNum(int num, int step)
{
if (num >= 0)
return ((num + (step / 2)) / step) * step;
else
return ((num - (step / 2)) / step) * step;
}
floatの場合
float RoundNum(float num, float step)
{
if (num >= 0)
return floor((num + step / 2) / step) * step;
else
return ceil((num - step / 2) / step) * step;
}
一部の部品は直観に反しているように見えるか、あまり最適化されていないようです。 (num + step/2)intにキャストしようとしましたが、負のfloat((int) -12.0000 = -11
など)。とにかく、これらは私がテストしたいくつかのケースです:
数値を10で割ります。
number = number / 10;
Math.Ceiling(number);//round up
Math.Round(number);//round down
次に、10を掛けます。
number = number * 10;
public static int Round(int n)
{
// Smaller multiple
int a = (n / 10) * 10;
// Larger multiple
int b = a + 10;
// Return of closest of two
return (n - a > b - n) ? b : a;
}