数値を最も近い全体または最も近い半分に切り上げるにはどうすればよいですか?
例えば:
> 23.15 --> 23.5
> 23.56 --> 24.0
私が知っている丸め関数はとですがfloor
、ceil
それらは最も近い整数にのみ丸められます。
0.5の倍数に切り上げたいですか?私はそれを正しく理解していますか?
double RoundUpToPointFive(double d)
{
return Math.Ceiling(d * 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
天井のこの関数はMicrosoftExcelで使用されており、この計算に一致させるために、このアルゴリズムを考案しました。
迅速で汚い方法:
2で乗算し、上限を設定し、2で除算します。すばやく簡単に理解できますが、数値がオーバーフローするため、エッジケースでは失敗します。
より堅牢な方法は、上記の方法でラウンドを評価する前に、小数点以下のすべてを切り取り、切り取った整数に結果を加算することです。
デビッドの方法はそれをほぼ封印しますが、ここに別のより長い方法があります。
double dbNum = 3.44;
double dbNumModified = 3.44 + 0.5;
dbNumModified = Math.Floor(dbNum);
if(dbNumModified < dbNum)
{
dbNumModified += 0.5;
}
return dbNumModified;