¿Por qué 0.ToString (“#. ##”) devuelve una cadena vacía en lugar de 0.00 o al menos 0?

114

¿Por qué 0.ToString("#.##")devuelve una cadena vacía? ¿No debería ser 0.00o al menos 0 ?

user960567
fuente

Respuestas:

185

#en el formato de cadena indica que el valor es opcional. Si desea obtener la salida 0.00, necesita lo siguiente:

0.ToString("0.00");

Consulte aquí los formatos numéricos personalizados que se pueden pasar a este método.

Rich O'Kelly
fuente
3
Una cosa todavía me confunde por qué el resultado no es 0. Porque 0 no es opcional. ¿Tiene sentido el vacío?
user960567
135

Porque en una cadena de formato, #se usa para indicar un marcador de posición de carácter opcional; solo se usa si es necesario para representar el número.

Si haces esto en su lugar: 0.ToString("0.##");obtienes:0

Curiosamente, si haces esto: 0.ToString("#.0#");obtienes:.0

Si desea los tres dígitos: 0.ToString("0.00");produce:0.00


De los comentarios a esta respuesta, su argumento parece ser,

debería mostrar '0', porque ¿por qué alguien querría ver una cadena vacía si el valor numérico es 0?

La respuesta es simple: tiene la opción de elegir cómo desea que se muestre. Para eso son las cadenas de formato personalizado. Simplemente ha elegido la cadena de formato incorrecta para sus necesidades .

Andrew Barber
fuente
20

De acuerdo con la documentación sobre el marcador de posición de dígitos .

Si el valor que se formatea tiene un dígito en la posición donde aparece el '#' en la cadena de formato, ese dígito se copia en la cadena de resultado. De lo contrario, no se almacena nada en esa posición en la cadena de resultados. Este especificador nunca muestra el carácter '0' si no es un dígito significativo, incluso si '0' es el único dígito de la cadena. Mostrará el carácter '0' si es un dígito significativo en el número que se muestra. La cadena de formato "##" hace que el valor se redondee al dígito más cercano que precede al decimal, donde siempre se usa el redondeo desde cero. Por ejemplo, formatear 34.5 con "##" daría como resultado el valor 35.

Si desea que se muestre el cero, use Zero PlaceHolder

Si el valor que se formatea tiene un dígito en la posición donde aparece el '0' en la cadena de formato, ese dígito se copia en la cadena de resultado. La posición del '0' más a la izquierda antes del punto decimal y el '0' más a la derecha después del punto decimal determina el rango de dígitos que siempre están presentes en la cadena de resultado.
El especificador "00" hace que el valor se redondee al dígito más cercano que precede al decimal, donde siempre se usa el redondeo desde cero. Por ejemplo, formatear 34.5 con "00" resultaría en el valor 35.

Miguel Madero
fuente
-1

Úselo así:

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

0after #asegurará establecer el valor de salida en 0 si el valor es 0, de lo contrario, mostrará el valor. Así 0.0.ToString("#0.##")=0.00y10.ToString("#.##")=10.00

usuario11530336
fuente