Есть ли способ указать строку стандартного или настраиваемого числового формата, чтобы всегда выводить знак, будь то + ve или -ve (хотя что он должен делать для нуля, я не уверен!)
Есть ли способ указать строку стандартного или настраиваемого числового формата, чтобы всегда выводить знак, будь то + ve или -ve (хотя что он должен делать для нуля, я не уверен!)
Ответы:
Да, ты можешь. Есть условное форматирование. См. Раздел Условное форматирование в MSDN.
например:
string MyString = number.ToString("+0;-#");
Где каждый раздел, разделенный точкой с запятой, представляет положительные и отрицательные числа
или:
string MyString = number.ToString("+#;-#;0");
если вы не хотите, чтобы у нуля был знак плюса.
+#;-#
, для значения 0 я получаю только «+», без фактического 0. для меня я хочу 0 появляться как «+0», так это работает: +#;-#;+0
.
''
, можно добиться больших результатов! Посмотрите на это Changes.ToString("'('#' ▲)';'('#' ▼)';''")
:! Это сэкономило мне много времени и сотни if
заявлений! :)
+0;-#
вместо этого. +#;-#;+0
Этот ответ действительно вводил меня в заблуждение.
Вы также можете использовать строки формата в 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}";
+#;-#
формата для значения 0
+0;-#
. :)
+#;-#;+0
более , +#;-#
как это делает его более ясным , что 0 будет отформатирован как +0
В отличие от других ответов кажется, что если вы хотите получить +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.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
Используйте три части для трех случаев: положительный; отрицательный; ноль.
Другие аспекты примера:
Ноль не подписан. Вы можете показать это как угодно, например, «ноль».
Абсолютные значения меньше единицы имеют начальный 0 перед десятичной точкой. Настроить по вкусу.
Количество цифр соответствует наибольшему и наименьшему абсолютным десятичным значениям. Настроить по вкусу.
Знак десятичной точки зависит от языка и региональных параметров. Заменители .NET.
Разделители группировки необязательны. Персонаж зависит от культуры. Заменители .NET. (Позиции также зависят от языка и региональных параметров, но контролируются только строкой формата.) Вы также можете использовать любой другой символ, кроме специальных символов для формата (включая,. # 0).
Я не могу комментировать, поэтому я отвечу здесь (система репутации орехов ....)
Вы можете использовать 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