C# 百分比值的十进制格式?

C# 百分比值的十进制格式?,c#,decimal,string.format,formatprovider,C#,Decimal,String.format,Formatprovider,我想要的是这样的东西: String.Format("Value: {0:%%}.", 0.8526) 该格式提供程序在哪里或我正在寻找的任何内容。 结果应为:值:%85.26。 我基本上需要它来进行wpf绑定,但首先让我们解决一般的格式问题: <TextBlock Text="{Binding Percent, StringFormat=%%}" /> 使用。这将因文化而异: String.Format("Value: {0:P2}.", 0.8526) // formats

我想要的是这样的东西:

String.Format("Value: {0:%%}.", 0.8526)
该格式提供程序在哪里或我正在寻找的任何内容。 结果应为:
值:%85.26。

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

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

使用。这将因文化而异:

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

如果您有充分的理由搁置依赖于区域性的格式设置,并明确控制值和“%”之间是否有空格,以及“%”是前导还是尾随,则可以使用NumberFormatInfo和属性

例如,要获取尾随“%”且值与“%”之间无空格的十进制值,请执行以下操作:

更完整的示例:

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)

我发现上面的答案是最好的解决方案,但我不喜欢百分号前的前导空格。我见过一些比较复杂的解决方案,但我只是在上面的答案中使用这个替换加法,而不是使用其他舍入解决方案

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

如果您希望使用一种格式,使您能够像输入一样保留数字,则此格式适用于我:
“\\%”

此代码可能会帮助您:

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";
设置区域性和“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("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%。”

“P1:72.9%。”


“P3:72.949%”

如果上述内容因区域性而异,是否存在与区域性无关的
p
格式设置?@bonCodigo:如果您想要特定区域性的输出,请明确指定该区域性。那么如何以区域性敏感的形式设置百分比值的格式,但要使用符号,以便将0.123格式设置为“+12.3%”,并在tr区域设置中设置为“+%12.3”?仍然是错误的,如果您想强制输入,您可以将数字作为浮点并添加百分号,因为替换代价很高,在本例中不是很有用的“String.Format”(“Value:{0:F2}.”,0.8526*100)
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("P1: {0}", (floating/100).ToString("P1", ci));
Console.WriteLine("P3: {0}", (floating/100).ToString("P3", ci));