浮動小数点を小数点以下2桁にフォーマットする


210

現在、クライアントのWebサイトの販売モジュールを構築しています。これまでのところ、完全に計算するための販売価格を取得していますが、行き詰まっているのは、出力を小数点以下2桁にフォーマットすることです。

結果をリストビューにデータバインドできるように、私は現在これを変数で呼び出しています。

Sale = float.Parse(((x.Sale_Price - (x.Sale_Price * (x.Discount_Price / 100))).ToString())),

出力を小数点以下2桁にフォーマットする方法を誰かに教えてもらえますか?どうもありがとう!


これを確認してください私はわかりませんが、ToString( "#。##")で機能する可能性があります
Syeda

回答:


467

ToStringメソッドにフォーマットを渡すことができます。例:

myFloatVariable.ToString("0.00"); //2dp Number

myFloatVariable.ToString("n2"); // 2dp Number

myFloatVariable.ToString("c2"); // 2dp currency

標準の数値フォーマット文字列


38
「N2」と「C2」は1000のセパレータを追加しますが、「0.00」は追加しません。
Marc K

5
確信が持てない場合(私はそうでした)に、float値をフォーマットするこれらのすべての方法は、丸めを提供します。
RenniePet 2017年

46

最初に行う必要があるのは、価格ではdecimalなくタイプを使用することですfloatfloatほとんどの小数部分を正確に表すことができないため、これを使用することは絶対に受け入れられません。

それがDecimal.Round()できたら、2か所に丸めることができます。


36

String.Format("{0:#,###.##}", value)

C#の文字列フォーマットのより複雑な例:

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

1243.50を渡すと、「$ 1,240.00」が出力されます。同じ形式を出力しますが、数値が負の場合は括弧で囲み、数値がゼロの場合は文字列「ゼロ」を出力します。



4
string outString= number.ToString("####0.00");

1
カスタム形式では「0」と「#」の違いがあります。「0」:ゼロが存在する場合、対応する数字でゼロを置き換えます。それ以外の場合は、結果の文字列にゼロが表示されます。"#":存在する場合、 "#"記号を対応する数字に置き換えます。それ以外の場合、結果の文字列に数字は表示されません。参照
劉鎮瑲

3

すでに述べたように、フォーマットされた結果を使用する必要があります。これは、すべてのを介して行われWrite()WriteLine()Format()、およびToString()方法。

言及されていないのは、小数点以下の桁数を指定できる固定小数点形式です。例に示すように、「F」を使用し、「F」に続く数字は出力される小数点以下の桁数です。

Console.WriteLine("{0:F2}", 12);    // 12.00 - two decimal places
Console.WriteLine("{0:F0}", 12.3);  // 12 - ommiting fractions

2

これは、補間された文字列を使用する場合に使用します。私は実際にこれを投稿しています。試行錯誤にうんざりしていて、スカラーをフォーマットする必要があるたびに、最終的には大量のドキュメントをスクロールするからです。

$"{1234.5678:0.00}"        "1234.57"        2 decimal places, notice that value is rounded
$"{1234.5678,10:0.00}"     "   1234.57"     right-aligned
$"{1234.5678,-10:0.00}"    "1234.57   "     left-aligned
$"{1234.5678:0.#####}"     "1234.5678"      5 optional digits after the decimal point
$"{1234.5678:0.00000}"     "1234.56780"     5 forced digits AFTER the decimal point, notice the trailing zero
$"{1234.5678:00000.00}"    "01234.57"       5 forced digits BEFORE the decimal point, notice the leading zero
$"{1234.5612:0}"           "1235"           as integer, notice that value is rounded
$"{1234.5678:F2}"          "1234.57"        standard fixed-point
$"{1234.5678:F5}"          "1234.56780"     5 digits after the decimal point, notice the trailing zero
$"{1234.5678:g2}"          "1.2e+03"        standard general with 2 meaningful digits, notice "e"
$"{1234.5678:G2}"          "1.2E+03"        standard general with 2 meaningful digits, notice "E"
$"{1234.5678:G3}"          "1.23E+03"       standard general with 3 meaningful digits
$"{1234.5678:G5}"          "1234.6"         standard general with 5 meaningful digits
$"{1234.5678:e2}"          "1.23e+003"      standard exponential with 2 digits after the decimal point, notice "e"
$"{1234.5678:E3}"          "1.235E+003"     standard exponential with 3 digits after the decimal point, notice "E"
$"{1234.5678:N2}"          "1,234.57"       standard numeric, notice the comma
$"{1234.5678:C2}"          "$1,234.57"      standard currency, notice the dollar sign
$"{1234.5678:P2}"          "123,456.78 %"   standard percent, notice that value is multiplied by 100
$"{1234.5678:2}"           "2"              :)

パフォーマンス警告

補間された文字列は遅いです。私の経験では、これは順序です(速いから遅い):

  1. value.ToString(format)+" blah blah"
  2. string.Format("{0:format} blah blah", value)
  3. $"{value:format} blah blah"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.