【问题标题】:How can I use a percent % in FormatString without it multiplying by 100?如何在不乘以 100 的情况下在 FormatString 中使用百分比?
【发布时间】:2011-08-24 10:35:35
【问题描述】:

我想将整数格式化为百分比,而不用乘以 100,如 here 所示。因为我的源是一个 int,所以将它除以 100 不是一个有效的选项。这可能吗?

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

【问题讨论】:

    标签: c# format-string


    【解决方案1】:

    您可以转义% 字符:

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

    请注意,有两种方法可以将\ 用作转义字符:如果您在字符串文字前加上逐字符号(@),那么\ 字符会按原样包含在字符串中,即表示作为格式字符串的一部分,单个 \ 将用作转义字符。

    没有@ 逐字符号,\s 被编译器解释为转义字符串,因此需要自行转义,如\\

    选择其中之一,但不能同时选择:

    @"{0:#\%}"  -> right
    "{0:#\\%}"  -> right
    @"{0:#\\%}" -> wrong
    

    【讨论】:

    • 对于非零值可以正常工作,但是当值为零(0)时,只显示 %。有什么帮助吗?
    • 用这个[DisplayFormat(DataFormatString = @"{0:#0.##\%}")]解决了我自己
    • 这个问题可能是您现在已经失去了对格式的文化意识
    • @xr280xr 我也是这么想的;我很惊讶更多的人没有注意到这一点。例如,在土耳其语中,% 符号放在 数字之前,并且某些语言对百分比有不同的间距规则。
    【解决方案2】:

    将 % 放在 {0:..} 之外

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

    【讨论】:

    • 这确实是最简单的解决方案,不知道为什么它没有被投票得更高。
    • 另一种“微软大锤”解决方案,直到这里的某个人比整个公司更有意义!
    • @cadmium 它的票数不高,因为您不能直接在自定义数字格式字符串上使用它。我的意思是像ToString() 这样的方法将不允许{ } 表达式,而是您只能在上述解决方案中提供{0:} 之间的格式部分。不过像String.Format() 这样的方法是可以的。
    • 我认为这不是一个好的答案。如果你的价值不存在怎么办?你会在你的字段中得到一个孤独的 % char。
    【解决方案3】:

    从您的链接页面:

    \ 转义字符

    导致下一个字符被解释为文字而不是自定义格式说明符。

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

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 2022-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2015-02-27
      • 2012-11-07
      • 2013-04-20
      相关资源
      最近更新 更多