Existe alguma maneira de especificar uma string de formato numérico padrão ou personalizado para sempre exibir o sinal, seja + ve ou -ve (embora o que deva fazer para zero, não tenho certeza!)
Existe alguma maneira de especificar uma string de formato numérico padrão ou personalizado para sempre exibir o sinal, seja + ve ou -ve (embora o que deva fazer para zero, não tenho certeza!)
Respostas:
Sim você pode. Há formatação condicional. Consulte Formatação condicional no MSDN
por exemplo:
string MyString = number.ToString("+0;-#");
Onde cada seção separada por ponto e vírgula representa números positivos e negativos
ou:
string MyString = number.ToString("+#;-#;0");
se você não quiser que o zero tenha um sinal de mais.
+#;-#
, pelo valor 0 I obter apenas "+", sem real 0. para mim eu quero 0 a aparecer como "0", então isso funciona: +#;-#;+0
.
''
fará grandes coisas! Veja isto Changes.ToString("'('#' ▲)';'('#' ▼)';''")
:! Isso me salvou muito tempo e centenas de if
declarações! :)
+0;-#
vez de +#;-#;+0
Esta resposta foi realmente enganosa para mim.
Você também pode usar seqüências de caracteres de formato em string.Format (); a string de formato é separada do índice com dois pontos (':')
var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);
Para o número {+1, -1, 0}, isso fornece:
1, Sinal de força +1, Nenhum sinal para zero +1
-1, Sinal de força -1, Nenhum sinal para zero -1
0, Sinal de força +0, Nenhum sinal para zero 0
Você também pode usar uma sequência interpolada em vez de string.Format
obter o mesmo resultado:
var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";
+#;-#
formato para o valor 0
+0;-#
. :)
+#;-#;+0
mais, +#;-#
pois isso deixa mais claro que 0 será formatado como +0
Ao contrário das outras respostas, parece que se você deseja obter +1, -1, +0 (para argumentos 1, -1, 0), precisa usar o formato:
String.Format("{0:+#;-#;+0}", 0)); // output: +0
ou
String.Format("{0:+0;-#}", 0)); // output: +0
Se você usar apenas +#;-#
, será exibido apenas +
(não +0
) para 0.
O especificador personalizado "#" (em https://msdn.microsoft.com/en-us/library/0c899ak8.aspx )
Observe que esse especificador nunca exibe um zero que não é um dígito significativo, mesmo que zero seja o único dígito na string. Ele exibirá zero apenas se for um dígito significativo no número que está sendo exibido.
Além disso, lembre-se de que, se você precisar de precisão decimal, precisará especificá-la assim:
String.Format("{0:+0.##;-#.##}", 0)); // output: +0
ou, se você não deseja que zeros sempre apareçam, assim:
String.Format("{0:+0.00;-#.00}", 0)); // output: +0.00
Para uma expressão numérica de qualquer tipo:
+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
Use três partes para três casos: positivo; negativo; zero
Outros aspectos do exemplo:
Zero não está assinado. Você pode mostrar isso como qualquer coisa, como "zero".
Valores absolutos menores que um têm um 0 à esquerda antes do ponto decimal. Ajuste a gosto.
O número de dígitos corresponde aos maiores e menores valores decimais absolutos. Ajuste a gosto.
O caractere de ponto decimal é específico da cultura. Substitutos do .NET.
Os separadores de agrupamento são opcionais. O personagem é específico da cultura. Substitutos do .NET. (As posições também são específicas da cultura, mas são controladas apenas pela string de formato.) Você também usa qualquer outro caractere, exceto os caracteres especiais para Format (que incluem,. # 0).
Não posso comentar, então eu respondo aqui (sistema de reputação nuts ...)
Você pode usar number.ToString ("+ 0; - #") muito bem para produzir a string UTC TimeFormat
Aqui mostrado no código do PowerShell
"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"
Obrigado @gcores https://stackoverflow.com/users/40256/gcores