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