C#にて、小数点以下の数値を丸める、切り捨て・切り上げ・四捨五入の方法を説明します。
数値がプラスの数とマイナスの数で基本的に処理を分けます。
以下の例はdouble・decimalにて行っています。
小数点以下切捨
static public double RoundDown(double val) { if (0.0 < val) { return Math.Floor(val); } else { return Math.Ceiling(val); } } static public decimal RoundDown(decimal val) { if (0.0m < val) { return Math.Floor(val); } else { return Math.Ceiling(val); } }
小数点以下切り上
static public double RoundUp(double val) { if (0.0 < val) { return Math.Ceiling(val); } else { return Math.Floor(val); } } static public decimal RoundUp(decimal val) { if (0.0m < val) { return Math.Ceiling(val); } else { return Math.Floor(val); } }
小数点以下四捨五入
static public double Round(double val) { return Math.Round(val, MidpointRounding.AwayFromZero); } static public decimal Round(decimal val) { return Math.Round(val, MidpointRounding.AwayFromZero); }
指定桁位置で切り捨・切り上げ・四捨五入
少数点以下切り捨てではなく、小数点x桁以下切り捨てのサンプルです。
// 指定桁位置で切り捨て static public double RoundDown(double val, int digit) { double b; b = Math.Pow(10.0, digit); return ((Omit(val * b) / b)); } // 指定桁位置で切り捨て static public decimal RoundDown(decimal val, int digit) { decimal b; b = (decimal)Math.Pow(10.0, digit); return ((Omit(val * b) / b)); } // 指定桁位置で切り上げ static public double RoundUp(double val, int digit) { double b; b = Math.Pow(10.0, digit); return ((Raise(val * b) / b)); } // 指定桁位置で切り上げ static public decimal RoundUp(decimal val, int digit) { decimal b; b = (decimal)Math.Pow(10.0, digit); return ((Raise(val * b) / b)); } // 指定桁位置で四捨五入 static public double Round(double val, int digit) { double b; b = Math.Pow(10.0, digit); return ((Round(val * b) / b)); } // 指定桁位置で四捨五入 static public decimal Round(decimal val, int digit) { decimal b; b = (decimal)Math.Pow(10.0, digit); return ((Round(val * b) / b)); }