セージ の メモ書き

メモこそ命の恩人だ

C# - Floor/Ceiling/Round メソッド

Floor メソッド ( Floor : 床 )

docs.microsoft.com

  • 指定値以下の 最大の整数 を返す。
  • この機能を "床関数" という。

Debug.Write($"{Math.Floor(1.1)}");
// 1
Debug.Write($"{Math.Floor(1.9)}");
// 1
Debug.Write($"{Math.Floor(-0.1)}");
// -1
Debug.Write($"{Math.Floor(-0.9)}");
// -1

// ちゃんと床関数の動作になっていることを確認。

切り捨て処理

  • Math.Floor と Math.Pow の組み合わせで実現する。
  • Pow を利用し、桁位置を調整する。
double getRoundDown(double data, int digitPosition) 
{
    const int decimalNumber = 10;
    var adjustData = Math.Pow(decimalNumber, digitPosition);
    return  Math.Floor(data * adjustData) / adjustData;
}
var data = 3.14159265359;

Debug.WriteLine(getRoundDown(data, digitPosition: 0));
// 3
Debug.WriteLine(getRoundDown(data, digitPosition: 2));
// 3.14
Debug.WriteLine(getRoundDown(data, digitPosition: 4));
// 3.1415

// 指定桁で切り捨て処理できたことを確認。


Ceiling メソッド ( Ceiling : 天井 )

docs.microsoft.com

  • 指定値以上の 最小の整数 を返す。
  • この機能を "天井関数" という。

Debug.Write($"{Math.Ceiling(1.1)}");
// 2
Debug.Write($"{Math.Ceiling(1.9)}");
// 2
Debug.Write($"{Math.Ceiling(-0.1)}");
// 0
Debug.Write($"{Math.Ceiling(-0.9)}");
// 0

// ちゃんと天井関数の動作になっていることを確認。

切り上げ処理

  • Math.Ceiling と Math.Pow の組み合わせで実現する。
  • Pow を利用し、桁位置を調整する。
double getRoundUp(double data, int digitPosition) 
{
    const int decimalNumber = 10;
    var adjustData = Math.Pow(decimalNumber, digitPosition);
    return  Math.Ceiling(data * adjustData) / adjustData;
}
var data = 3.14159265359;

Debug.WriteLine(getRoundUp(data, digitPosition: 0));
// 4
Debug.WriteLine(getRoundUp(data, digitPosition: 2));
// 3.15
Debug.WriteLine(getRoundUp(data, digitPosition: 4));
// 3.1416

// 指定桁で切り上げ処理できたことを確認。


Round メソッド ( Round : 丸める )

docs.microsoft.com

四捨五入

動作
0.5 より小さい 切り捨て
0.5 切り上げ ★
0.5 より大きい 切り上げ
  • MidpointRounding.AwayFromZero を指定する。
  • Round の既定動作でないため、明示的に指定する必要あり。
Debug.Write($"{Math.Round(10.4, MidpointRounding.AwayFromZero)}");
// 10

Debug.Write($"{Math.Round(10.4999999999, MidpointRounding.AwayFromZero)}");
// 10
// 0.5 より少しでも小さければ、切り捨てになる。

Debug.Write($"{Math.Round(10.5, MidpointRounding.AwayFromZero)}");
// 11
// 0.5 なので切り上げになった。

銀行丸め

動作
0.5 より小さい 切り捨て
0.5 切り捨て ★
0.5 より大きい 切り上げ
  • Round メソッドの既定動作。
  • 銀行丸めの場合、5 の扱いが四捨五入と違う。
Debug.Write($"{Math.Round(10.4)}");
// 10

Debug.Write($"{Math.Round(10.5)}");
// 10
// 0.5 なので切り捨てになった。これが銀行丸め。

Debug.Write($"{Math.Round(10.5000000001)}");
// 11
// 0.5 より少しでも大きければ、切り上げになる。



以上