数学函数将值向上舍入为.0或.5

时间:2012-10-13 04:21:01

标签: c# asp.net

如何将数字向最近的整数舍入到最近的一半?

例如:

> 23.15 --> 23.5
> 23.56 --> 24.0

我所知道的舍入函数是floorceil,但那些只舍入到最接近的整数。

4 个答案:

答案 0 :(得分:10)

你想要向上舍入到0.5的倍数?我理解正确吗?

double RoundUpToPointFive(double d)
{
    return Math.Ceiling(d * 2) / 2;
}

答案 1 :(得分:3)

快速而肮脏的方式:

乘以2,上限,除以2.快速且易于理解,但由于数字溢出,这将在边缘情况下失败。

更强大的方法是在使用上述方法评估回合之前切断小数点之前的所有内容,并将结果添加到您剪切的整数中。

答案 2 :(得分:3)

为什么不尝试这个,在精度上有任何意义:

public double Ceiling(double value, double significance)
{
    if ((value % significance) != 0)
    {
        return ((int)(value / significance) * significance) + significance;
    }

    return Convert.ToDouble(value);
}

用法:

var d1 = Ceiling(23.15, 0.5); // 23.5
var d2 = Ceiling(23.56, 0.5); // 24.0

Ceiling的这个功能由Microsoft Excel使用,为了匹配这个计算我设计了这个算法。

参考:Ceiling and Floor functions like Microsoft Excel in .NET

答案 3 :(得分:0)

大卫的方法几乎密封它,但这是另一种更长的方式。

double dbNum = 3.44;
double dbNumModified = 3.44 + 0.5;
dbNumModified = Math.Floor(dbNum);
if(dbNumModified < dbNum)
{
   dbNumModified += 0.5;
}
return dbNumModified;