Пользовательская строка числового формата, чтобы всегда отображать знак - PullRequest
168 голосов
/ 08 декабря 2008

Можно ли каким-либо образом указать стандартную или пользовательскую строку числового формата, чтобы всегда выводить знак, будь то + ve или -ve (хотя, что он должен делать для нуля, я не уверен!)

Ответы [ 5 ]

264 голосов
/ 08 декабря 2008

Да, вы можете. Есть условное форматирование. См. Условное форматирование в MSDN

.

Например:

string MyString = number.ToString("+0;-#");

Где каждый раздел, разделенный точкой с запятой, представляет положительные и отрицательные числа

или

string MyString = number.ToString("+#;-#;0");

если вы не хотите, чтобы ноль имел знак плюс.

53 голосов
/ 17 февраля 2009

Осторожно, при использовании условного форматирования отрицательное значение автоматически не получает знак. Вам нужно сделать

string MyString = number.ToString("+#;-#;0");
25 голосов
/ 24 июня 2013

Вы также можете использовать строки форматирования в string.Format (); строка формата отделяется от индекса двоеточием (':')

var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);

Для числа {+1, -1, 0} это дает:

1, знак силы +1, знак ноль + 1
-1, знак силы -1, знак ноль отсутствует -1
0, знак силы +0, знак ноль отсутствует 0

Вы можете также использовать интерполированную строку вместо string.Format, чтобы получить тот же результат:

var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";
8 голосов
/ 13 августа 2015

В отличие от других ответов, кажется, что если вы хотите получить +1, -1, +0 (для аргументов 1, -1, 0), вам нужно использовать формат:

String.Format("{0:+#;-#;+0}", 0));  // output: +0

или

String.Format("{0:+0;-#}", 0));  // output: +0

Если вы используете просто +#;-#, он будет отображать только + (не +0) для 0.

Пользовательский спецификатор "#" (на https://msdn.microsoft.com/en-us/library/0c899ak8.aspx)

Обратите внимание, что этот спецификатор никогда не отображает ноль, который не является значащей цифрой, даже если ноль является единственной цифрой в строке. Он будет отображать ноль только в том случае, если это значащая цифра в отображаемом числе.

Также имейте в виду, что если вам нужна десятичная точность, вам нужно указать ее следующим образом:

String.Format("{0:+0.##;-#.##}", 0));  // output: +0

или, если вы не хотите, чтобы нули появлялись всегда, вот так:

String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00
0 голосов
/ 25 мая 2018

Для числового выражения любого типа:

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0

Используйте три части для трех случаев: положительный; отрицательный; ноль

Другие аспекты примера:

  • Ноль не подписан. Вы можете сделать так, чтобы оно отображалось как угодно, например, «ноль».

  • Абсолютные значения меньше единицы имеют начальный 0 перед десятичной запятой. Отрегулируйте по вкусу.

  • Количество цифр для самых больших и самых маленьких абсолютных десятичных значений. Отрегулируйте по вкусу.

  • Десятичный знак зависит от культуры. .NET заменители.

  • Группирующие разделители необязательны. Характер является специфическим для культуры. .NET заменители. (Позиции также зависят от культуры, но это зависит только от вашей строки формата.) Вы также используете любой другой символ, кроме специальных символов для формата (включая. # 0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...