Чи можу я вказати стандартний або спеціальний рядок чисельного формату, щоб завжди виводити знак, будь то + 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 замінники. (Позиції також є специфічними для культури, але це лише під контролем рядка формату.) Ви також використовуєте будь-який інший символ, окрім спеціальних символів для Format (які включають,. # 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