如何在 FormatString 中使用百分号 %,而不使其乘以 100?

45

我想将一个整数格式化为百分比,而不会像这里所示那样乘以100。因为我的数据源是整数,所以首先除以100并不是一个有效的选项。这是否可能?

[DisplayFormat(DataFormatString = "{0:#%}")]
4个回答

68
你可以转义 % 字符:
[DisplayFormat(DataFormatString = @"{0:#\%}")]
请注意,使用反斜杠作为转义字符有两种方法:如果你在字符串文字前加上verbatim 符号 (@),那么 \ 字符将按原样包含在字符串中,这意味着在格式字符串的一部分中,一个单独的 \ 将作为转义字符起作用。
如果没有 @ verbatim 符号,则编译器会将 \ 解释为转义字符串,并且需要对其进行转义,写成 \\。
选择其中一种方法即可,但不要两种都使用。
@"{0:#\%}"  -> right
"{0:#\\%}"  -> right
@"{0:#\\%}" -> wrong

当数值为非零值时,它能够正常工作,但当数值为零(0)时,只显示%。有什么帮助吗? - Mahesh Kudikala
通过这个 [DisplayFormat(DataFormatString = @"{0:#0.##\%}")],我自己解决了问题。 - Mahesh Kudikala
2
这个问题可能是你现在失去了对格式的文化意识。 - xr280xr
1
@xr280xr 我也是这么想的。我很惊讶更多的人没有注意到这一点。比如,在土耳其,%符号放在数字之前,有些语言对百分比有不同的间距规则。 - Ruben9922

37

将%放在{0:..}的外面

[DisplayFormat(DataFormatString = "{0:0.00}%")]

2
这确实是最简单的解决方案,不确定为什么它没有得到更高的投票。 - Michael Cook
又是一个“微软大锤”解决方案,直到这里有人比整个公司更有意义! - Fandango68
4
@cadmium 这段代码没有得到更高的投票是因为它不能直接用于自定义数字格式字符串。我的意思是像 ToString() 这样的方法不允许使用 { } 表达式,而你只能在上述解决方案中提供在 {0:} 之间的格式部分。不过像 String.Format() 这样的方法则可以使用。 - Martin Braun
3
我认为这不是一个好的答案。如果你所需的值不存在,会在你的字段中得到一个孤独的百分号字符。请问该怎么办? - pix

6

从您的链接页面:

转义字符

使下一个字符被解释为字面量,而不是自定义格式说明符。

[DisplayFormat(DataFormatString = "{0:#\\%}")]

0

如果值为0,则格式@"{0:#%}"将只显示%。 它应该显示0%。因此,正确的格式是

[DisplayFormat(DataFormatString = @"{0:#0\%}")]

哈希后面多了一个零。


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