Double・Decimalの丸め・端数処理を行うには、次のメソッドを使用します。 目的に応じて5種類の丸め方法を用いることができます。 各メソッドの動作は次のとおりです。
- Truncate (切り捨て)
- 指定した数値の端数部分を切り捨てた整数(数直線上で0の方向にある次の整数)に丸められる。
- Ceiling (正の無限大への丸め)
- 指定した数値以下の最大の整数(数直線上で正の方向にある次の整数)に丸められる。
- Floor (負の無限大への丸め)
- 指定した数値以上の最小の整数(数直線上で負の方向にある次の整数)に丸められる。
- Round
- 丸めの方法MidpointRoundingを指定して整数への丸めを行います。 特に指定しなかった場合はMidpointRounding.ToEvenの動作になります。
- MidpointRounding.ToEven (最近接偶数への丸め、銀行家丸め)
- 数値の端数は偶数方向に丸められる。
- MidpointRounding.AwayFromZero (四捨五入)
- 数値の端数はゼロから遠い方に丸められる。
Math.Truncate・Ceiling・Floor・Roundの各メソッドを使って切り捨て・切り上げ・切り下げ・四捨五入を行う
using System;
class Sample {
static void Main()
{
// 切り捨て
Console.WriteLine("Truncate(1.5) = {0}", Math.Truncate(1.5));
// 次の整数への切り上げ
Console.WriteLine("Ceiling(1.1) = {0}", Math.Ceiling(1.1));
// 前の整数への切り下げ
Console.WriteLine("Floor(1.9) = {0}", Math.Floor(1.9));
// 四捨五入 (小数点0桁への四捨五入・小数点1桁目での四捨五入)
Console.WriteLine("Round(0.4) = {0}", Math.Round(0.4, 0, MidpointRounding.AwayFromZero));
Console.WriteLine("Round(0.5) = {0}", Math.Round(0.5, 0, MidpointRounding.AwayFromZero));
}
}
実行結果
Truncate(1.5) = 1 Ceiling(1.1) = 2 Floor(1.9) = 1 Round(0.4) = 0 Round(0.5) = 1
これらのメソッドの戻り値はいずれもDoubleもしくはDecimalとなるため、整数型への代入を目的として端数処理する場合は、メソッドを呼び出して端数処理した結果をさらに整数型へとキャストする必要があります。
C#での整数型へのキャストはTruncateメソッドによる切り捨てと同じ動作、VBでのCInt
等による型変換はMidpointRounding.ToEven
を指定したRoundメソッドによる最近接偶数への丸めと同じ動作となります。