VB.NETでの端数処理方法(四捨五入、切り捨て、切り上げ)について記載します。
四捨五入
MathクラスのRoundメソッドを使用して四捨五入を行うことができます。
ただし、Roundメソッドの端数処理は、銀行丸めと呼ばれる処理結果を返すため注意が必要です。
一般的な四捨五入を行うときは、引数にMidpointRounding.AwayFromZeroを指定します。
一般的な四捨五入
小数部を四捨五入するには、2番目の引数に小数部の桁数を指定します。
小数第一位の四捨五入(1.4⇒1) Math.Round(1.4, 0, MidpointRounding.AwayFromZero) 小数第一位の四捨五入(1.5⇒2) Math.Round(1.5, 0, MidpointRounding.AwayFromZero) 小数第二位の四捨五入(1.44⇒1.4) Math.Round(1.44, 1, MidpointRounding.AwayFromZero) 小数第二位の四捨五入(1.45⇒1.5) Math.Round(1.45, 1, MidpointRounding.AwayFromZero)
銀行丸めの四捨五入
銀行丸めとは、端数が0.5より小さい場合は切り捨て、0.5より大きい場合は切り上げます。
ここまでは一般的な四捨五入と同じですが、0.5と同じ場合は処理結果が偶数になるように端数処理を行います。
1.4 ⇒ 1
1.6 ⇒ 2
1.5 ⇒ 2
2.5 ⇒ 2
3.5 ⇒ 4
小数第一位の四捨五入(1.4⇒1) Math.Round(1.4, 0) 小数第一位の四捨五入(1.6⇒2) Math.Round(1.6, 0) 小数第一位の四捨五入(1.5⇒2) Math.Round(1.5, 0)
整数部の四捨五入
Roundメソッドを使用して整数部の四捨五入を行うこともできます。
1の位の四捨五入(1111⇒1110) Math.Round(1111 / 10, 0, MidpointRounding.AwayFromZero) * 10 10の位の四捨五入(1111⇒1100) Math.Round(1111 / 100, 0, MidpointRounding.AwayFromZero) * 100 100の位の四捨五入(1111⇒1000) Math.Round(1111 / 1000, 0, MidpointRounding.AwayFromZero) * 1000
切り捨て
MathクラスのFloorまたはTruncateメソッドを使用して切り捨てを行うことができます。
正の数の切り捨てであれば、どちらのメソッドでも同じ処理結果が返されますが、負の数の切り捨てでは、Floorメソッドは0から遠ざかる整数(小さな)へ、Truncateメソッドは0に近づく整数(大きな数)が返されます。
Floorメソッドの切り捨て
Floorメソッドでは、小数第一位を切り捨てします。
負の数の切り捨てでは、Floorメソッドは0から遠ざかる整数(小さな)になるように端数処理を行います。
小数第一位の切り捨て(1.5⇒1) Math.Floor(1.5) 小数第一位の切り捨て(-1.5⇒-2) Math.Floor(-1.5) 小数第二位の切り捨て(1.45⇒1.4) Math.Floor(1.45 * 10) / 10 小数第二位の切り捨て(-1.45⇒-1.5) Math.Floor(-1.45 * 10) / 10 1の位の切り捨て(15⇒10) Math.Floor(15 / 10) * 10 1の位の切り捨て(-15⇒-20) Math.Floor(-15 / 10) * 10
Truncateメソッドの切り捨て
Floorメソッドでは、小数第一位を切り捨てします。
負の数の切り捨てでは、Truncateメソッドは0に近づく整数(大きな数)になるように端数処理を行います。
小数第一位の切り捨て(1.5⇒1) Math.Truncate(1.5) 小数第一位の切り捨て(-1.5⇒-1) Math.Truncate(-1.5) 小数第二位の切り捨て(1.45⇒1.4) Math.Truncate(1.45 * 10) / 10 小数第二位の切り捨て(-1.45⇒-1.4) Math.Truncate(-1.45 * 10) / 10 1の位の切り捨て(15⇒10) Math.Truncate(15 / 10) * 10 1の位の切り捨て(-15⇒-10) Math.Truncate(-15 / 10) * 10
切り上げ
MathクラスのCeilingメソッドを使用して切り上げを行うことができます。
Ceilingメソッドでは、大きな整数になるように端数処理を行います。
小数第一位の切り上げ(1.5⇒2) Math.Ceiling(1.5) 小数第一位の切り上げ(-1.5⇒-1) Math.Ceiling(-1.5) 小数第二位の切り上げ(1.45⇒1.5) Math.Ceiling(1.45 * 10) / 10 小数第二位の切り上げ(-1.45⇒-1.4) Math.Ceiling(-1.45 * 10) / 10 1の位の切り上げ(15⇒20) Math.Ceiling(15 / 10) * 10 1の位の切り上げ(-15⇒-10) Math.Ceiling(-15 / 10) * 10