Строка пользовательского числового формата, чтобы всегда отображать знак.
-
20-08-2019 - |
Вопрос
Есть ли способ указать стандартную или пользовательскую строку числового формата, чтобы всегда выводить знак, будь то +ve или -ve (хотя я не уверен, что он должен делать для нуля!)
Решение
Да, ты можешь.Есть условное форматирование.Видеть Условное форматирование в MSDN
например:
string MyString = number.ToString("+0;-#");
Где каждый раздел, разделенный точкой с запятой, представляет положительные и отрицательные числа.
или:
string MyString = number.ToString("+#;-#;0");
если вы не хотите, чтобы ноль имел знак плюса.
Другие советы
Осторожно, при использовании условного форматирования отрицательное значение автоматически не получает знак. Вам нужно сделать
string MyString = number.ToString("+#;-#;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}";
В отличие от других ответов, кажется, что если вы хотите получить +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).