Пользовательская строка числового формата для отображения знака

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

Ответ 1

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

например:

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

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

или

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

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

Ответ 2

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

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

Ответ 3

Вы также можете использовать строки форматирования в 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}";

Ответ 4

В отличие от других ответов кажется, что если вы хотите получить +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

Ответ 5

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

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

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

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

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

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

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

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

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

Ответ 6

Я не могу комментировать, поэтому я делаю ответ здесь (чокнутая система репутации....)

Вы можете очень хорошо использовать number.ToString("+0; - #"), чтобы создать формат UTC String TimeFormat

Здесь показано в PowerShell код

"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"

Спасибо @gcores https://stackoverflow.com/users/40256/gcores