Por que 0.ToString (“#. ##”) retorna uma string vazia em vez de 0,00 ou pelo menos 0?

114

Por que 0.ToString("#.##")retorna uma string vazia? Não deveria ser 0.00ou pelo menos 0 ?

user960567
fonte

Respostas:

185

#no formato de string indicam que o valor é opcional. Se você deseja obter a saída, 0.00você precisa do seguinte:

0.ToString("0.00");

Veja aqui os formatos numéricos personalizados que podem ser passados ​​para este método.

Rich O'Kelly
fonte
3
Uma coisa ainda me confunde: por que o resultado não é 0. Porque 0 não é opcional. O vazio faz sentido?
user960567
135

Porque em uma string de formato, o #é usado para significar um marcador de posição de caractere opcional; só é usado se necessário para representar o número.

Se você fizer isso: 0.ToString("0.##");você obtém:0

Curiosamente, se você fizer isso: 0.ToString("#.0#");você obtém:.0

Se você quiser todos os três dígitos: 0.ToString("0.00");produz:0.00


A partir dos comentários a esta resposta, seu argumento parece ser,

deve mostrar '0', porque por que alguém iria querer ver uma string vazia se o valor numérico é 0?

A resposta é simples: você pode escolher como deseja que seja exibido. É para isso que servem as strings de formato personalizado. Você simplesmente escolheu a string de formato incorreta para suas necessidades .

Andrew Barber
fonte
20

De acordo com a documentação sobre o Digit Placeholder .

Se o valor sendo formatado tiver um dígito na posição onde o '#' aparece na string de formato, esse dígito é copiado para a string de resultado. Caso contrário, nada é armazenado nessa posição na string de resultado. Este especificador nunca exibe o caractere '0' se não for um dígito significativo, mesmo se '0' for o único dígito na string. Ele exibirá o caractere '0' se for um dígito significativo no número que está sendo exibido. A string de formato "##" faz com que o valor seja arredondado para o dígito mais próximo anterior ao decimal, onde o arredondamento de zero é sempre usado. Por exemplo, a formatação de 34,5 com "##" resultaria no valor 35.

Se você quiser que o zero seja exibido, use o Zero PlaceHolder

Se o valor que está sendo formatado tiver um dígito na posição em que '0' aparece na string de formato, esse dígito é copiado para a string de resultado. A posição do '0' mais à esquerda antes do ponto decimal e o '0' mais à direita depois do ponto decimal determina o intervalo de dígitos que estão sempre presentes na string de resultado.
O especificador "00" faz com que o valor seja arredondado para o dígito mais próximo anterior ao decimal, onde o arredondamento de zero é sempre usado. Por exemplo, a formatação de 34,5 com "00" resultaria no valor 35.

Miguel Madero
fonte
-1

Use-o assim:

0.ToString("#0.##")

0depois #irá garantir definir o valor de saída para 0 se o valor for 0, caso contrário, ele exibirá o valor. Então 0.0.ToString("#0.##")=0.00e10.ToString("#.##")=10.00

user11530336
fonte