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

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

例如:

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

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

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

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

快速而肮脏的方式:

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

一个更健壮的方法是在使用上述方法评估轮次之前切断小数点之前的所有内容,并将结果添加到您切断的整数中。

为什么不尝试这个,在精度上你想要的任何意义:

 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 

此function的Ceiling由Microsoft Excel使用,为了匹配此计算,我设计了此算法。

参考: Ceiling和Floorfunction,如.NET中的Microsoft Excel

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

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