格式化十进制百分比值?


206

我想要的是这样的:

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

%%是该格式提供程序或我正在寻找的任何内容。结果应为:Value: %85.26.

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

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

Answers:



11

如果您有充分的理由搁置与文化相关的格式,并明确控制值和“%”之间是否有空格,以及“%”是前导还是尾随,则可以使用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)

3

如果您想使用一种格式,使您可以像输入条目一样保留数字,则该格式对我有用: "# \\%"



-8

我发现上述答案是最好的解决方案,但我不喜欢在百分号前加空格。我看到了一些复杂的解决方案,但是我只是在上面的答案中使用了Replace替代,而不是使用其他舍入解决方案。

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

而且还是错误的,如果您想强制输入那么多,则可以将数字设置为float并添加百分号,因为replace的成本很高,在这种情况下不是很有用的“ String.Format(” Value:{0:F2} 。“,0.8526 * 100)”
rekiem87 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.