web-dev-qa-db-ja.com

C#では、どのようにして数値を小数点第2位に四捨五入しますか?

Math.Round関数を使ってこれを行いたい

325
Laila

いくつか例を挙げましょう。

decimal a = 1.994444M;

Math.Round(a, 2); //returns 1.99

decimal b = 1.995555M;

Math.Round(b, 2); //returns 2.00

また、次のような過負荷を考慮して、丸め/四捨五入をした銀行家も検討します。

Math.Round(a, 2, MidpointRounding.ToEven);

もっと詳しい情報があります ここ

547
Eoin Campbell

これを試して:

twoDec = Math.Round(val, 2)
85
John Boker

個人的には何も丸めません。とにかく丸めはCSのちょっと赤いニシンなので、できるだけ辛抱強くそれを保ってください。しかし、あなたはあなたのユーザーのためにデータをフォーマットしたいと思います、そしてそのために、私はstring.Format("{0:0.00}", number)が良いアプローチであると思います。

33
Gleno

あなたが文字列が欲しいのなら

> (1.7289).ToString("#.##")
"1.73"

または10進数

> Math.Round((Decimal)x, 2)
1.73m

でも覚えておいて!丸めは分散的ではありません。 round(x*y) != round(x) * round(y)。そのため、計算が終了するまで四捨五入をしないでください。正確さを失うことになります。

28
Colonel Panic

//小数点以下第2位まで変換する

String.Format("{0:0.00}", 140.6767554);        // "140.67"
String.Format("{0:0.00}", 140.1);             // "140.10"
String.Format("{0:0.00}", 140);              // "140.00"

Double d = 140.6767554;
Double dc = Math.Round((Double)d, 2);       //  140.67

decimal d = 140.6767554M;
decimal dc = Math.Round(d, 2);             //  140.67

=========

// just two decimal places
String.Format("{0:0.##}", 123.4567);      // "123.46"
String.Format("{0:0.##}", 123.4);         // "123.4"
String.Format("{0:0.##}", 123.0);         // "123"

"0"と "#"を組み合わせることもできます。

String.Format("{0:0.0#}", 123.4567)       // "123.46"
String.Format("{0:0.0#}", 123.4)          // "123.4"
String.Format("{0:0.0#}", 123.0)          // "123.0"
13
Rae Lee

ウィキペディアにはNiceページがあります 丸め全般について。

すべての.NET(マネージ)言語は、共通言語ランタイム(CLR)の丸めメカニズムのいずれかを使用できます。たとえば、 Math.Round() (上記のとおり)メソッドを使用すると、開発者は丸めのタイプ(四捨五入またはゼロからの切り捨て)を指定できます。 Convert.ToInt32()メソッドとそのバリエーションでは、 四捨五入 を使用します。 Ceiling() および Floor() メソッドは関連しています。

カスタム数値フォーマット で丸めることもできます。

Decimal.Round() はMath.Round()とは異なるメソッドを使用します。

これが、バンカーの丸めアルゴリズムの 便利なpos tです。 Raymondのユーモラスな 投稿の1つをここで参照してください 丸めについて...

12
Foredecker

私はその古い質問を知っていますが、 Math round String format round の間の次の違いに注意してください。

decimal d1 = (decimal)1.125;
Math.Round(d1, 2).Dump();   // returns 1.12
d1.ToString("#.##").Dump(); // returns "1.13"

decimal d2 = (decimal)1.1251;
Math.Round(d2, 2).Dump();   // returns 1.13
d2.ToString("#.##").Dump(); // returns "1.13"
6
Guy

これはC#で小数点以下2桁に丸めるためのものです。

label8.Text = valor_cuota .ToString("N2") ;

VB.NETの場合:

 Imports System.Math
 round(label8.text,2)
5
sadim

あなたがチェックしたいと思うかもしれない1つの事はMath.Roundの丸めメカニズムです:

http://msdn.Microsoft.com/ja-jp/library/system.midpointrounding.aspx

それ以外は、* 100/100よりもMath.Round(inputNumer、numberOfPlaces)を推奨します。

4
Michael Stum

Math.Round(YourNumber、2)を使用して四捨五入する桁数を指定できるはずです。

もっと読むことができます ここ

3
Kevin W Lee

ストリングa = "10.65678";

10進数d = Math.Round(Convert.ToDouble(a.ToString())、2)

1

Math.Floor(123456.646 * 100)/ 100 123456.64が返される

0
user3405179

数値を四捨五入したい場合は、以下のように異なる結果を得ることができます。Math.Round()関数の使い方(切り上げまたは切り捨ての場合)、倍精度および/または浮動小数そして、あなたは中点丸めを適用します。特に、その中の演算や丸める変数が演算から来るときに使います。たとえば、これら2つの数を掛けたいとします。 0.75 * 0.95 = 0.7125 。右? C#にはない

小数点以下第3位を四捨五入するとどうなるかを見てみましょう。

double result = 0.75d * 0.95d; // result = 0.71249999999999991
double result = 0.75f * 0.95f; // result = 0.71249997615814209

result = Math.Round(result, 3, MidpointRounding.ToEven); // result = 0.712. Ok
result = Math.Round(result, 3, MidpointRounding.AwayFromZero); // result = 0.712. Should be 0.713

ご覧のとおり、中点を切り捨てたい場合は、最初のRound()が正しいです。しかし、2番目のRound()は切り上げたい場合は間違っています。

これは負の数に適用されます。

double result = -0.75 * 0.95;  //result = -0.71249999999999991
result = Math.Round(result, 3, MidpointRounding.ToEven); // result = -0.712. Ok
result = Math.Round(result, 3, MidpointRounding.AwayFromZero); // result = -0.712. Should be -0.713

だから、私見、あなたはあなたの要件に合うMath.Round()のためのあなた自身のラップ関数を作成するべきです。パラメータ「roundUp = true」が次に大きい数値に丸めることを意味する関数を作成しました。つまり、0.7125は0.713に丸め、-0.7125は-0.712に丸めます(-0.712> -0.713のため)。これは私が作成した関数で、小数点以下の桁数はいくつでも機能します。

double Redondea(double value, int precision, bool roundUp = true)
{
    if ((decimal)value == 0.0m)
        return 0.0;

    double corrector = 1 / Math.Pow(10, precision + 2);

    if ((decimal)value < 0.0m)
    {
        if (roundUp)
            return Math.Round(value, precision, MidpointRounding.ToEven);
        else
            return Math.Round(value - corrector, precision, MidpointRounding.AwayFromZero);
    }
    else
    {
        if (roundUp)
            return Math.Round(value + corrector, precision, MidpointRounding.AwayFromZero);
        else
            return Math.Round(value, precision, MidpointRounding.ToEven);
    }
}

変数 'c​​orrector'は、浮動小数点数または倍精度数での演算の不正確さを修正するためのものです。

0
fedesanp
  public double RoundDown(double number, int decimalPlaces)
        {
            return Math.Floor(number * Math.Pow(10, decimalPlaces)) / Math.Pow(10, decimalPlaces);
        }
0
Ruan