可能性の重複:C#の10進数のラウンド
3.786444499963
これに:そのようなポイントの後の長い休みで小数を返す方法
c# - How do I round a decimal value to 2 decimal places (for output on a page)
:
3.787
そのわずか数
可能性の重複:C#の10進数のラウンド
3.786444499963
これに:そのようなポイントの後の長い休みで小数を返す方法
c# - How do I round a decimal value to 2 decimal places (for output on a page)
:
3.787
そのわずか数
の残りの部分の周りにも、ポイントにそれをカットしかし3.786444499963
3に小数点以下の一般的に受け入れられて丸めが3.786
ではありません。なぜあなたは別の理由で考えるのですか?したがって
:
var round = Math.Round(3.786444499963m, 3, MidpointRounding.AwayFromZero);
Console.WriteLine(round == 3.786m); // prints true
あなたはそれは常に切り上げしたい場合:
var round = Math.Round(3.786444499963m + 0.0005m, 3);
Console.WriteLine(round == 3.787m); // prints true
あなたは私がそこに何をしたか見ていますか? Math.Round
を使用する前に入力に0.0005m
を追加しました。一般的には、醜いdouble/decimal
変換を避けるために、x
n
に小数点以下の桁、おそらく
var round = Math.Round(x + 5m * Convert.ToDecimal(Math.Pow(10, -n - 1)), n);
かを、四捨五入する:
int k = 1;
decimal value = 5m;
while(k <= n + 1) { value /= 10m; k++; }
var round = Math.Round(x + value, n);
は、あなたが知っておく必要があるエッジケースがあります。 3.786はどうなりますか? 3.787に切り上げるか、3.786にするか?あなたは正確に何をしたいのかを指定していないので、私はこの端をあなたに残します。
RoundUp(3.786444499963M, 3);
static decimal RoundUp(decimal dec, int precision)
{
decimal rounder = (decimal)(0.5 * Math.Pow(10, -precision));
return Math.Round(dec + rounder, precision);
}
3.786を返します。 Math.Roundは最後の桁から「カスケード」しません。それは単に数字の位置+ 1を見ます – xanatos
私はそれを丸める必要があります –
@ roy.d:ラウンドする3つの主な方法があります。例えば、小数点以下を四捨五入します。丸めの場合、近似は最も近い整数になります(0.3→0; 0.7→1)。 Ceilでは、aproximationは常に最も近い上位の整数(0.3 - > 1; 0.7 - > 1)であり、Floorとの関係は常に最も近い下位の整数(0.3 - > 0; 0.7 - > 0)です。これらのうちどれが必要ですか? –
Math.Ceiling(3.786444499963 * 1000)/1000;
おかげで両方の答えが働いています: Math.Ceiling(3.786444499963 * 1000)/ 1000; および Math.Round(3.786444499963m + 0.0005m、3); –
あなたはそれが間違った方法であることを知っていますよね?正しい方法は、単純に4桁の10進数字(この場合)を見ることです。 – xanatos
私の答えを試しましたか? –
@ xanatosもしあなたがバンカーの丸めをしているなら、4桁目を見る必要があり、5ならば4桁目以降にゼロ以外の桁があるかどうかを調べる必要があります。 – phoog