747

現在 で小数点以下の値を表示する場合、小数点以下.ToString()15 桁まで正確です。ドルとセントを表すために使用しているので、小数点以下 2 桁だけを出力したいと考えています。

これには のバリエーションを使用し.ToString()ますか?

4

18 に答える 18

1055
decimalVar.ToString("#.##"); // returns ".5" when decimalVar == 0.5m

また

decimalVar.ToString("0.##"); // returns "0.5"  when decimalVar == 0.5m

また

decimalVar.ToString("0.00"); // returns "0.50"  when decimalVar == 0.5m
于 2008-10-02T22:43:02.617 に答える
643

これは古い質問であることは知っていますが、誰も回答を投稿していないように見えて驚きました。

  1. バンカーの丸めを使用しませんでした
  2. 値を 10 進数として保持します。

これは私が使用するものです:

decimal.Round(yourValue, 2, MidpointRounding.AwayFromZero);

http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx

于 2011-04-20T01:16:08.007 に答える
415
decimalVar.ToString("F");

この意志:

  • 小数点以下第2位に四捨五入します。 23.45623.46
  • 常に小数点以下2桁であることを確認してください 2323.00; 12.512.50

通貨の表示に最適です。

ToString( "F")に関するドキュメントを確認してください(Jon Schneiderに感謝します)。

于 2009-12-15T14:29:47.167 に答える
115

表示のためにこれが必要な場合は、string.Format を使用します。

String.Format("{0:0.00}", 123.4567m);      // "123.46"

http://www.csharp-examples.net/string-format-double/

「m」は 10 進数のサフィックスです。小数点以下について:

http://msdn.microsoft.com/en-us/library/364x0z75.aspx

于 2008-10-02T22:43:37.110 に答える
59

与えられた 10 進数 d=12.345; d.ToString("C")またはString.Format("{0:C}", d)は$12.35を生成します- 記号を含む現在のカルチャの通貨設定が使用されることに注意してください。

「C」は現在のカルチャの桁数を使用することに注意してください。C{Precision specifier}likeで必要な精度を強制するために、いつでもデフォルトをオーバーライドできますString.Format("{0:C2}", 5.123d)

于 2008-10-02T22:58:37.697 に答える
53

3,456,789.12... のように、コンマと小数点 (通貨記号なし) でフォーマットする場合

decimalVar.ToString("n2");
于 2009-04-21T23:20:35.723 に答える
37

Decimal明らかではない非常に重要な特徴があります。

どこから来たDecimalかに基づいて、小数点以下の桁数を「知っている」

以下は予想外の場合があります。

Decimal.Parse("25").ToString()          =>   "25"
Decimal.Parse("25.").ToString()         =>   "25"
Decimal.Parse("25.0").ToString()        =>   "25.0"
Decimal.Parse("25.0000").ToString()     =>   "25.0000"

25m.ToString()                          =>   "25"
25.000m.ToString()                      =>   "25.000"

で同じ操作を行うと、上記のすべての例でDouble小数点以下の桁数がゼロ ( ) になります。"25"

小数点以下 2 桁が必要な場合は、それが通貨であるため可能性が高いです。この場合、95% の確率で問題ありません。

Decimal.Parse("25.0").ToString("c")     =>   "$25.00"

またはXAMLで使用します{Binding Price, StringFormat=c}

XML を Amazon の Web サービスに送信するときに、10 進数として 10 進数が必要になったケースが 1 つあります。Decimal 値 (元は SQL Server から) が送信され25.1200、拒否されたため、サービスは不平を言っていました (25.12は予期された形式でした)。

Decimal.Round(...)値のソースに関係なく、問題を解決するために小数点以下 2 桁を使用するだけで済みました。

 // generated code by XSD.exe
 StandardPrice = new OverrideCurrencyAmount()
 {
       TypedValue = Decimal.Round(product.StandardPrice, 2),
       currency = "USD"
 }

TypedValueはタイプなDecimalのでToString("N2")、丸めて として保持する必要がありましたdecimal

于 2011-10-26T07:30:22.117 に答える
22

さまざまな形式を表示する小さな Linqpad プログラムを次に示します。

void Main()
{
    FormatDecimal(2345.94742M);
    FormatDecimal(43M);
    FormatDecimal(0M);
    FormatDecimal(0.007M);
}

public void FormatDecimal(decimal val)
{
    Console.WriteLine("ToString: {0}", val);
    Console.WriteLine("c: {0:c}", val);
    Console.WriteLine("0.00: {0:0.00}", val);
    Console.WriteLine("0.##: {0:0.##}", val);
    Console.WriteLine("===================");
}

結果は次のとおりです。

ToString: 2345.94742
c: $2,345.95
0.00: 2345.95
0.##: 2345.95
===================
ToString: 43
c: $43.00
0.00: 43.00
0.##: 43
===================
ToString: 0
c: $0.00
0.00: 0.00
0.##: 0
===================
ToString: 0.007
c: $0.01
0.00: 0.01
0.##: 0.01
===================
于 2013-11-18T20:44:08.593 に答える
15

Math.Round メソッド (Decimal、Int32)

于 2008-10-02T22:44:43.377 に答える
13

Mike M. の回答decimal.Roundは .NET に関する私にとって完璧でしたが、執筆時点では.NET Core にはメソッドがありません。

.NET Core では、以下を使用する必要がありました。

decimal roundedValue = Math.Round(rawNumber, 2, MidpointRounding.AwayFromZero);

文字列への変換を含むハッキーな方法は次のとおりです。

public string FormatTo2Dp(decimal myNumber)
{
    // Use schoolboy rounding, not bankers.
    myNumber = Math.Round(myNumber, 2, MidpointRounding.AwayFromZero);

    return string.Format("{0:0.00}", myNumber);
}
于 2016-10-14T19:53:44.177 に答える
13

値が 0 の場合、空の文字列が必要になることはほとんどありません。

decimal test = 5.00;
test.ToString("0.00");  //"5.00"
decimal? test2 = 5.05;
test2.ToString("0.00");  //"5.05"
decimal? test3 = 0;
test3.ToString("0.00");  //"0.00"

最高評価の回答は正しくなく、(ほとんどの) 人の時間を 10 分無駄にしています。

于 2017-08-01T01:51:52.193 に答える
9

これらのどれも、2 dpを強制し、0.005 -> 0.01

2 dp を強制するには、精度を 2 dp 増やして、少なくとも 2 dp を確保する必要があります。

次に、2 dp を超えないように丸めます

Math.Round(exactResult * 1.00m, 2, MidpointRounding.AwayFromZero)

6.665m.ToString() -> "6.67"

6.6m.ToString() -> "6.60"
于 2012-10-25T14:35:16.783 に答える