是否有用 String.Format 和百分比删除尾随零的符号?

Is there notation to remove trailing zeros with String.Format and percentage?

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

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%

Documentation 确实仅指定用于修改的精度说明符。如果你想要像你发布的那样的东西,你必须采用更乏味的方式:

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

结果是:92.4%

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

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

好吧,这有点尴尬,但显然很简单:

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

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

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