【C#】Convert.ToInt32と他の四捨五入メソッドの違い

C#には、数値を四捨五入して整数に変換するための複数のメソッドが用意されています。その中でも、Convert.ToInt32Math.RoundMath.FloorMath.CeilingMath.Truncateの各メソッドは、異なるシナリオに対応するために設計されています。本資料では、これらのメソッドの違いについて詳しく説明します。


1. Convert.ToInt32()

  • 四捨五入方法: 通常の四捨五入
  • 動作: 四捨五入の際、0.5以上の値は切り上げ、0.5未満の値は切り捨てます。
  • :
    • 4.5 → 5
    • 5.5 → 6
    • 4.4 → 4

2. Math.Round()

  • 四捨五入方法: 丸め方法を指定できる
  • デフォルトの丸め方法: 最近接偶数への丸め(Banker’s Rounding)
    • Math.Round(4.5) → 4Math.Round(5.5) → 6
  • 別の丸め方法:
    • MidpointRounding.AwayFromZero: 0.5の値は常に遠い方の整数に丸められます(一般的な四捨五入)。
      • Math.Round(4.5, MidpointRounding.AwayFromZero) → 5Math.Round(5.5, MidpointRounding.AwayFromZero) → 6
    • MidpointRounding.ToEven: これはBanker’s Roundingと同じです。

3. Math.Floor()

  • 四捨五入方法: 切り捨て
  • 動作: 小数部分を無視し、常に整数部分に切り捨てます(負の無限大方向に切り捨て)。
  • :
    • 4.9 → 4
    • -4.9 → -5

4. Math.Ceiling()

  • 四捨五入方法: 切り上げ
  • 動作: 小数部分を無視し、常に整数部分に切り上げます(正の無限大方向に切り上げ)。
  • :
    • 4.1 → 5
    • -4.1 → -4

5. Math.Truncate()

  • 四捨五入方法: 小数部分の単純な切り捨て
  • 動作: 小数部分を切り捨て、整数部分だけを残します。これはMath.Floor()に似ていますが、Math.Floor()が負の数を切り捨てる方向に対して、Math.Truncate()は単に小数部分を削除します。
  • :
    • 4.9 → 4
    • -4.9 → -4

まとめ

  • Convert.ToInt32() は、通常の四捨五入を行います
  • Math.Round() は、デフォルトで「最近接偶数への丸め(Banker’s Rounding)」を行いますが、丸め方法を指定することで柔軟に使用できます。
  • Math.Floor() は常に切り捨て、Math.Ceiling() は常に切り上げを行います。
  • Math.Truncate() は、小数部分を単純に切り捨てます。

これらのメソッドは、異なるシナリオに応じて適切に使用する必要があります。四捨五入の方法を選ぶ際は、期待する結果と丸めのニーズに基づいて選択することが重要です。

.NET,C#

Posted by hidepon