web-dev-qa-db-fra.com

Pourquoi 0.ToString ("#. ##") renvoie-t-il une chaîne vide au lieu de 0.00 ou au moins 0?

Pourquoi 0.ToString("#.##") renvoie-t-il une chaîne vide? Ça ne devrait pas être 0.00 ou au moins?

110
user960567

# dans le format de chaîne indique que la valeur est facultative. Si vous souhaitez obtenir le résultat 0.00 vous avez besoin des éléments suivants:

0.ToString("0.00");

Voir ici pour les formats numériques personnalisés qui peut être passé à cette méthode.

180
Rich O'Kelly

Parce que dans une chaîne de format, le # Est utilisé pour désigner un espace réservé pour un caractère optionnel; il n'est utilisé que si nécessaire pour représenter le nombre.

Si vous faites cela à la place: 0.ToString("0.##"); vous obtenez: 0

Fait intéressant, si vous faites ceci: 0.ToString("#.0#"); vous obtenez: .0

Si vous voulez les trois chiffres: 0.ToString("0.00"); produit: 0.00


Des commentaires à cette réponse, votre argument semble être,

il devrait afficher "0", car pourquoi voudrait-on jamais voir une chaîne vide si la valeur numérique est 0?

La réponse est simple: Vous avez le choix de la manière dont vous souhaitez afficher les informations. C'est à cela que servent les chaînes de format personnalisé. Vous avez simplement choisi le format de chaîne incorrect pour vos besoins.

130
Andrew Barber

Selon la documentation sur le Digit Placeholder.

Si la valeur en cours de formatage comporte un chiffre à la position où le "#" apparaît dans la chaîne de formatage, ce chiffre est alors copié dans la chaîne de résultat. Sinon, rien n'est stocké à cette position dans la chaîne de résultat. Ce spécificateur n'affiche jamais le caractère "0" s'il ne s'agit pas d'un chiffre significatif, même si "0" est le seul chiffre de la chaîne. Il affichera le caractère "0" s'il s'agit d'un chiffre significatif dans le nombre affiché. La chaîne de format "##" provoque l'arrondi de la valeur au chiffre le plus proche précédant la décimale, où l'arrondi de zéro est toujours utilisé. Par exemple, le formatage 34.5 avec "##" donnerait la valeur 35.

Si vous voulez que le zéro s’affiche, utilisez le Zero PlaceHolder

si la valeur en cours de formatage a un chiffre à la position où le '0' apparaît dans la chaîne de formatage, ce chiffre est copié dans la chaîne de résultat. La position du "0" le plus à gauche avant le point décimal et du "0" le plus à droite après le point décimal détermine la plage de chiffres toujours présents dans la chaîne de résultat.
Le spécificateur "00" fait en sorte que la valeur soit arrondie au chiffre le plus proche précédant la décimale, l’arrondi de zéro étant toujours utilisé. Par exemple, le formatage 34.5 avec "00" donnerait la valeur 35.

20
Miguel Madero

Essayez ceci 0.ToString("#,##; #,##;0")

https://docs.Microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings#SectionSeparator

La première section s'applique aux valeurs positives, la deuxième section aux valeurs négatives et la troisième section aux zéros.

2
nektobit