パーセンテージ値の小数をフォーマットしますか?


206

私が欲しいのはこのようなものです:

String.Format("Value: {0:%%}.", 0.8526)

ここで、%%はそのフォーマットプロバイダーまたは私が探しているものです。結果:Value: %85.26.

基本的にwpfバインディングに必要ですが、最初に一般的なフォーマットの問題を解決しましょう:

<TextBlock Text="{Binding Percent, StringFormat=%%}" />

回答:


422

Pフォーマット文字列を使用します。これは文化によって異なります。

String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture)

1
ここで見ると大きな違いはアメリカとフランスのタイプのようです。上記が文化によって異なる場合、文化に依存しないPフォーマットはありますか?
bonCodigo 2014年

2
@bonCodigo:特定のカルチャの出力が必要な場合は、カルチャを明示的に指定します。
Michael Haren

11

カルチャに依存するフォーマットを設定して、値と「%」の間にスペースがあるかどうか、および「%」が先頭または末尾にあるかどうかを明示的に制御する正当な理由がある場合は、NumberFormatInfoのPercentPositivePatternおよびPercentNegativePatternプロパティ。

たとえば、末尾に「%」があり、値と「%」の間にスペースがない10進数値を取得するには:

myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 });

より完全な例:

using System.Globalization; 

...

decimal myValue = -0.123m;
NumberFormatInfo percentageFormat = new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 };
string formattedValue = myValue.ToString("P2", percentageFormat); // "-12.30%" (in en-us)

3

あなたがあなたのエントリのような数を保つことを可能にするフォーマットを使いたいなら、このフォーマットは私のために働きます: "# \\%"


2

このコードはあなたを助けるかもしれません:

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";

-8

上記の答えが最良の解決策であることがわかりましたが、パーセント記号の前の先行スペースは好きではありません。やや複雑なソリューションを見てきましたが、他の丸めソリューションを使用する代わりに、上記の回答にこの置換オプションを使用しています。

String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture)

そして、まだ間違っています。その入力を強制したい場合は、数値を浮動小数点数にして、パーセント記号を追加できます。置換はコストがかかり、この場合はあまり役に立ちません。 "String.Format(" Value:{0:F2} 。 "、0.8526 * 100)"
rekiem87 '29
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.