Por que 0.ToString("#.##")
retorna uma string vazia? Não deveria ser 0.00
ou pelo menos 0 ?
Por que 0.ToString("#.##")
retorna uma string vazia? Não deveria ser 0.00
ou pelo menos 0 ?
Respostas:
#
no formato de string indicam que o valor é opcional. Se você deseja obter a saída, 0.00
você precisa do seguinte:
0.ToString("0.00");
Veja aqui os formatos numéricos personalizados que podem ser passados para este método.
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 .
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.
Tente isto 0.ToString("#,##; #,##;0")
A primeira seção se aplica a valores positivos, a segunda seção se aplica a valores negativos e a terceira seção se aplica a zeros.
Use-o assim:
0.ToString("#0.##")
0
depois #
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.00
e10.ToString("#.##")=10.00