String de formato numérico personalizado para exibir sempre o sinal

Existe alguma maneira eu posso especificar uma string de formato numérico padrão ou personalizado para sempre a saída do sinal, seja + ve ou -ve (embora o que deve fazer para zero, não tenho certeza!)

Sim você pode. Existe formatação condicional. Veja a formatação condicional no MSDN

por exemplo:

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

Onde cada seção separada por um 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.

Cuidado, ao usar a formatação condicional, o valor negativo não recebe automaticamente um sinal. Você precisa fazer

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

Você também pode usar as strings de formato em string.Format (); a string de formato é separada do índice por dois pontos (‘:’)

 string MyString = string.Format("Default format {0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}.", number); 

Para o número = {+1, -1, 0}, isso dá –
Formato padrão 1, sinal de força +1, sem sinal para zero +1.
Formato padrão -1, sinal de força -1, sem sinal para zero -1.
Formato padrão 0, sinal de força +0, sem sinal para zero 0.

Ao contrário das outras respostas, parece que se você deseja obter +1, -1, +0 (para os argumentos 1, -1, 0) você 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 seja um dígito significativo, mesmo se zero for o único dígito da string. Ele exibirá zero apenas se for um dígito significativo no número que está sendo exibido.

Também tenha em mente que, se você precisar de qualquer precisão decimal, você precisa especificá-lo assim:

 String.Format("{0:+0.##;-#.##}", 0)); // output: +0 

ou, se você não quiser zeros para sempre aparecer, 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ê poderia mostrar como qualquer coisa, como “zero”.

  • Valores absolutos menores que um têm um 0 à esquerda antes do ponto decimal. Ajuste a gosto.

  • Número de dígitos é para os maiores e menores valores decimais absolutos. Ajuste a gosto.

  • Caractere de ponto decimal é específico da cultura. Substitutos do .NET.

  • Os separadores de agrupamento são opcionais. O caractere é específico da cultura. Substitutos do .NET. (As posições também são específicas da cultura, mas isso é controlado apenas pela sua string de formato.) Você também usa qualquer outro caractere, exceto os caracteres especiais para Format (que incluem,. # 0).