Как я могу использовать процент% в FormatString без его умножения на 100?

#c# #format-string

#c# #format-string

Вопрос:

Я хотел бы отформатировать целое число в процентах без его умножения на 100, как показано здесь. Поскольку моим исходным кодом является значение int, деление его сначала на 100 недопустимо. Возможно ли это?

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

Ответ №1:

Вы можете экранировать % символ:

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

Обратите внимание, что есть два способа использовать в качестве escape-символа: если вы добавляете к строковому литералу дословный символ ( @ ), то символы включаются в строку как есть, что означает, что как часть строки формата одиночный символ будет функционировать как escape-символ.

Без @ символа verbatim s интерпретируются компилятором как escape-строки и поэтому должны сами экранироваться, как \ .

Выберите одно или другое, но не оба:

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

Комментарии:

1. Это отлично работает для ненулевых значений, но когда значение равно нулю (0), тогда отображается только%. Любая помощь?

2. Решил сам с этим [DisplayFormat(DataFormatString = @"{0:#0.##%}")]

3. Проблема с этим может заключаться в том, что теперь вы потеряли представление о своем форматировании

4. @xr280xr Я тоже об этом думал; Я удивлен, что больше людей этого не заметили. Например, в турецком языке знак% ставится перед числом, а в некоторых языках существуют разные правила интервала между процентами.

Ответ №2:

Поместите% вне {0: ..}

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

Комментарии:

1. Это действительно самое простое решение, не уверен, почему за него не проголосовали выше.

2. Еще одно решение «Microsoft Sledge Hammer» в другом месте, пока кто-то здесь не будет иметь больше смысла, чем целая компания!

3. @cadmium За него не проголосовали выше, потому что вы не можете использовать его непосредственно в строках пользовательского числового формата. Под этим я подразумеваю, что такие методы, как ToString() не разрешат { } выражение, скорее вы можете предоставить только часть формата, которая находится между {0: и } в приведенном выше решении. Однако такие методы, как String.Format() , подходят.

4. Я думаю, что это не очень хороший ответ. Что, если ваше значение отсутствует? вы получите одинокий символ% внутри вашего поля.

Ответ №3:

С вашей страницы, на которую дана ссылка:

Escape-символ

Приводит к тому, что следующий символ интерпретируется как литерал, а не как спецификатор пользовательского формата.

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

Ответ №4:

Если значение равно 0, формат @»{0:#%}» отображается только%. Должно отображаться 0%. Итак, правильный формат

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

После хэша есть дополнительный ноль.