Pourquoi 0.ToString («#. ##») renvoie-t-il une chaîne vide au lieu de 0,00 ou au moins 0?

114

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

user960567
la source

Réponses:

185

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

0.ToString("0.00");

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

Rich O'Kelly
la source
3
Une chose m'a encore confus que pourquoi le résultat n'est pas 0. Parce que 0 n'est pas facultatif. Le vide est-il logique?
user960567
135

Parce que dans une chaîne de format, le #est utilisé pour signifier un espace réservé de caractère facultatif; 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 cela: 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 quelqu'un voudrait-il 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 l'afficher. C'est à cela que servent les chaînes de format personnalisées. Vous avez simplement choisi la chaîne de format incorrecte pour vos besoins .

Andrew Barber
la source
20

Selon la documentation sur le Digit Placeholder .

Si la valeur mise en forme a un chiffre à la position où le «#» apparaît dans la chaîne de format, ce chiffre est 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 "##" entraîne l'arrondi de la valeur au chiffre le plus proche précédant la décimale, où l'arrondi à partir de zéro est toujours utilisé. Par exemple, le formatage de 34,5 avec «##» entraînerait 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 format, alors 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 qui sont toujours présents dans la chaîne de résultat.
Le spécificateur "00" provoque l'arrondi de la valeur au chiffre le plus proche précédant la décimale, où l'arrondi à partir de zéro est toujours utilisé. Par exemple, le formatage de 34,5 avec «00» donnerait la valeur 35.

Miguel Madero
la source
-1

Utilisez-le comme ceci:

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

0après #veillera à définir la valeur de sortie sur 0 si la valeur est 0 sinon elle affichera la valeur. Alors 0.0.ToString("#0.##")=0.00et10.ToString("#.##")=10.00

user11530336
la source