115 votes

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

¿Por qué 0.ToString("#.##") renvoie une chaîne vide ? Ne devrait-il pas s'agir de 0.00 o au moins 0 ?

187voto

rich.okelly Points 24144

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

0.ToString("0.00");

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

3 votes

Je ne comprends toujours pas pourquoi le résultat n'est pas égal à 0. Parce que 0 n'est pas optionnel. Est-ce que vide a un sens ?

137voto

Andrew Barber Points 25990

Parce que dans une chaîne de format, l'élément # est utilisé pour signifier un caractère de remplacement 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

Il est intéressant de noter que si vous faites cela : 0.ToString("#.0#"); vous obtenez : .0

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


D'après les commentaires de cette réponse, votre argument semble être le suivant,

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 la façon dont vous souhaitez qu'elle soit affichée. C'est à cela que servent les chaînes de formatage personnalisées. Vous avez simplement choisi la chaîne de formatage qui ne correspond pas à vos besoins .

20voto

Miguel Madero Points 1281

D'après la documentation sur le Caractère de remplacement du chiffre .

Si la valeur formatée comporte un chiffre à l'endroit 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 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 Il affiche le caractère '0' s'il s'agit d'un chiffre significatif dans le nombre affiché. La chaîne de format "##" permet d'arrondir la valeur au chiffre le plus proche précédant la décimale. la décimale, l'arrondi à partir de zéro étant toujours utilisé. Par exemple, en formatant 34,5 avec "##", on obtient la valeur 35.

Si vous voulez que le zéro s'affiche, utilisez la fonction Zero PlaceHolder

Si la valeur à formater comporte un chiffre à l'endroit où le "0" apparaît dans la chaîne de format, ce chiffre est copié dans la chaîne de résultat. La position du 0" le plus à gauche avant la virgule et le "0" le plus à droite après la virgule détermine la plage de chiffres qui sont toujours présents dans la chaîne de résultats.
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 à partir de zéro étant toujours utilisé. Par exemple, le formatage de 34.5 avec "00" donnera la valeur 35.

2voto

nektobit Points 588

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 s'applique aux valeurs négatives et la troisième section s'applique aux zéros.

-1voto

user11530336 Points 1

Utilisez-le comme suit :

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

0 après # s'assurera de mettre la valeur de sortie à 0 si la valeur est 0 sinon il affichera la valeur. Ainsi, la valeur de la sortie sera de 0 si la valeur est de 0. 0.0.ToString("#0.##")=0.00 y 10.ToString("#.##")=10.00

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X