C#では、丸めを行わずに最後の小数点以下2桁を取得しようとしています。私はMath.Floor
からMath.Truncate
にすべてを試みたが、何も動作していない。私が好きな結果の丸みのない最後の小数点以下2桁を取得する
サンプル:
1,424.2488298 -> 1,424.24
53.5821 -> 53.58
10,209.2991 -> 10,209.29
任意のアイデア?
C#では、丸めを行わずに最後の小数点以下2桁を取得しようとしています。私はMath.Floor
からMath.Truncate
にすべてを試みたが、何も動作していない。私が好きな結果の丸みのない最後の小数点以下2桁を取得する
サンプル:
1,424.2488298 -> 1,424.24
53.5821 -> 53.58
10,209.2991 -> 10,209.29
任意のアイデア?
まあ、数学的にそれは簡単です:
var f = 1.1234;
f = Math.Truncate(f * 100)/100; // f == 1.12
移動し、切り捨てる左二つの場所に戻ってそれをシフトするためにint型にキャスト右に小数点以下2桁は、。フレームワークにもそれを行う方法があるかもしれませんが、私は今見ていません。あなたはそれを一般化できます。
double Truncate(double value, int places)
{
// not sure if you care to handle negative numbers...
var f = Math.Pow(10, places);
return Math.Truncate(value * f)/f;
}
double d = Math.Truncate(d * 100)/100;
一般解:
をpublic static double SignificantTruncate(double num, int significantDigits)
{
double y = Math.Pow(10, significantDigits);
return Math.Truncate(num * y)/y;
}
その後
double x = 5.3456;
x = SignificantTruncate(x,2);
望ましい結果x=5.34
を演出します。
私の助言:は、最初にのdouble
を使用して停止します。小数点以下の四捨五入が必要な場合は、オッズは良いです。decimal
を使用する必要があります。あなたのアプリケーションは何ですか?
あなたはダブルを持っている場合は、このようにそれを行うことができます。ダブルの絶対値が792281625142643375935439504より大きければ100による乗算が失敗するので、この技術は、失敗します
double r = whatever;
decimal d = (decimal)r;
decimal truncated = decimal.Truncate(d * 100m)/100m;
に留意されたいです。 。大きい値を処理する必要がある場合は、特別なテクニックを使用する必要があります。 (もちろん、時間によって二重のは大きなことを、あなたはとにかく小数点以下2桁の数値を表現する能力をはるかに超えているされています。)
Math.Round(NumberToRound - (double)0.005,2)
すなわち
Math.Round(53.5821 - (double)0.005,2) // 53.58
Math.Round(53.5899 - (double)0.005,2) // 53.58
Math.Round(53.5800 - (double)0.005,2) // 53.58
あなたがしている場合* decimal *で作業している場合、なぜ* decimal *を使用できる場合は* double *を使用していますか? –
あなたはこの投稿に行き、あなたに合ったものを見つけることができますhttp://how-to-code-net.blogspot.ro/2012/09/how-to-format-number-to-x-decimal.html –