数学函数将值向上舍入为.0或.5
如何将数字舍入到最近的整数或最近的一半?
例如:
> 23.15 --> 23.5 > 23.56 --> 24.0
我知道的舍入函数是floor
和ceil
,但那些只舍入到最接近的整数。
你想要向上舍入到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
大卫的方法几乎密封它,但这是另一种更长的方式。
上述就是C#学习教程:数学函数将值向上舍入为.0或.5分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
double dbNum = 3.44; double dbNumModified = 3.44 + 0.5; dbNumModified = Math.Floor(dbNum); if(dbNumModified < dbNum) { dbNumModified += 0.5; } return dbNumModified;
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1025464.html