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));
}