【问题标题】:Is there notation to remove trailing zeros with String.Format and percentage?是否有使用 String.Format 和百分比删除尾随零的符号?
【发布时间】:2018-01-20 11:38:23
【问题描述】:

我知道可以使用格式模式中的# 删除尾随零:

double value = 92;
string formatted = $"{value:0.#}"; // "92"

并且使用P 会给你一个百分比:

double value = .9234;
string formatted = $"{value:P1}"; // "92.3%"

但是有没有办法将两者结合起来产生带有可选小数的百分比?

double value .92;
string formatted1 = $"{value:P#}"; // doesn't work. 
string formatted2 = $"{value:P0.#}"; // doesn't work. 

任何人都知道一种使用格式来实现此目的而不必将值乘以 100 的方法吗?基本上我想要.92 => 92%.924 => 92.4%

【问题讨论】:

  • 如果您关心性能,请不要担心,乘法是在几个周期内完成的指令之一。在你眨眼之前,CPU 可以乘以百万倍。
  • @M.kazemAkhgary,在这种情况下,不,这不是关于性能,而是关于简单性,但在我的实际项目中,它会提高性能。我正在 UWP 中做一些事情,并希望避免复杂的绑定和/或自定义模板只是为了删除尾随零。这很难用几句话来解释,但如果格式模式能够处理它,它实际上会提高性能。
  • 我希望你能在另一个考虑绑定和 UWP 的问题中问它。确保它不是重复的。您可以使用转换器。传递参数 100。在转换器内部尝试解析 int,将值乘以参数,转换回字符串并返回。 docs.microsoft.com/en-us/uwp/api/…
  • 我没有投反对票。为什么你认为我做到了?这是我的证明。 Upvoted ;) 但请记住不要过度简化您的问题,因为尽管您的问题是可以回答的,但它并不能回答或解决您真正的问题

标签: c# string.format


【解决方案1】:

好吧,这有点尴尬,但显然就是这么简单:

double value1 .92;
double value2 .923;
string formatted1 = $"{value:0.#%}"; // "92%" 
string formatted2 = $"{value:0.#%}"; // "92.3%"

% 符号是用于将数字乘以 100 并加上百分号的符号。使用 P 是更短的表示法,但 % 让您自定义输出。

所以格式字符串就像标准的0.#,但末尾有一个百分号0.#%

【讨论】:

    【解决方案2】:

    Documentation 只指定精度说明符进行修改。如果你想要像你发布的那样的东西,你必须走更乏味的方式:

    double value = 0.924;
    string formatted = $"{value * 100:0.##}%";
    

    结果是:92.4%

    【讨论】:

    • OP 专门要求一种方法来做到这一点,而不会被 100 混淆。
    • 变量内容不相乘,只为输出的evalutes表达式。如果他真的想要真正简单地寻找其用例的解决方案,他需要实现自己的格式提供程序:docs.microsoft.com/en-us/dotnet/api/…
    • @FilipKonečný,对不起,但这并不能回答我的问题。我已经知道我可以乘以 100 :)
    【解决方案3】:

    如果您不想相乘,可以使用正则表达式删除尾随零。但如果你追求性能,乘法(在其他答案中)会更快。

    double value = .9253;
    string formatted = $"{value:P2}"; // or P with any number you like.
    formatted = Regex.Replace(formatted, @"(?<=\d\.\d+)0+%$|\.0+%", "%");
    

    【讨论】:

    • 谢谢,但这太过分了。乘以 100 并使用格式“0.#”更容易
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多