¿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 ?

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.


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 .


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.



-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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.