将十进制数格式化为百分比值?

256

我想要的是像这样的东西:

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

其中%%是我正在寻找的格式提供程序或类似物。 应该得到:值:85.26%。

基本上,我需要它用于wpf绑定,但首先让我们解决一般的格式问题:

<TextBlock Text="{Binding Percent, StringFormat=%%}" />
7个回答

493

使用P格式字符串。这将根据文化差异而变化:

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

2
在这里看到的巨大差异就像美国和法国之间的差异。如果上述因文化而异,是否存在一种与文化无关的“P”格式? - bonCodigo
2
@bonCodigo:如果您想要特定文化的输出,请明确指定该文化。 - Michael Haren
1
那么我该如何在考虑文化差异的情况下格式化带符号的百分数值,以便将0.123格式化为“+12.3%”,并在tr_TR区域设置中格式化为“+%12.3”? - igors

21
如果您有充分的理由放弃依赖于文化背景的格式,并明确控制值与“%”之间是否有空格,以及“%”是前导还是后置,那么您可以使用NumberFormatInfo的PercentPositivePatternPercentNegativePattern属性。
例如,要获取带有尾随“%”且值与“%”之间没有空格的十进制值:
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)

或者只需使用.ToString("0.00%").ToString("%0.00") - undefined

11

设置您的文化和"P"字符串格式。

CultureInfo ci = new CultureInfo("en-us");
double floating = 72.948615;

Console.WriteLine("P02: {0}", (floating/100).ToString("P02", ci)); 
Console.WriteLine("P01: {0}", (floating/100).ToString("P01", ci)); 
Console.WriteLine("P: {0}", (floating/100).ToString("P", ci)); 
Console.WriteLine("P0: {0}", (floating/100).ToString("P0", ci));
Console.WriteLine("P1: {0}", (floating/100).ToString("P1", ci));
Console.WriteLine("P3: {0}", (floating/100).ToString("P3", ci));

输出:

"P02: 72.95%"

"P01: 72.9%"

"P: 72.95%"

"P0: 72%"

"P1: 72.9%"

"P3: 72.949%"


9
如果您想使用一种格式,使您可以像输入时那样保留数字,那么这种格式适用于我:"# \\%"

7
这段代码可能会对你有帮助:
double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";

1
这对我来说没有Culture.InvariantCulture也能工作。 - Kazeem Quadri

6

有一种简单且与文化无关的方法:只需使用“%”自定义说明符并手动控制符号位置。 https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings#SpecifierPct

格式字符串中的百分号(%)会导致数字在格式化之前乘以100。当%出现在格式字符串中时,本地化的百分号符号将插入到数字的位置。

string.Format("{0:0.0%}", 0.6493072393590115)
// outputs 64.9%

string.Format("{0:%000}", 0.6493072393590115)
// outputs %065

-9

我发现上面的答案是最好的解决方案,但我不喜欢百分号前面的空格。我看到了一些比较复杂的解决方案,但我只是使用这个替换方法来代替其他舍入解决方案。

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

2
还是错误的,如果你非要强制输入,你可以将数字作为浮点数并添加百分号,因为替换是昂贵的,在这种情况下也不是很有用。 "String.Format("Value: {0:F2}.", 0.8526*100)" - rekiem87

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接