213 votes

Chaîne de format numérique personnalisée pour toujours afficher le signe

Existe-t-il un moyen de spécifier une chaîne de format numérique standard ou personnalisée pour qu'elle affiche toujours le signe, qu'il soit +v ou -v (bien que je ne sois pas sûr de ce qu'elle devrait faire pour le zéro !)

335voto

gcores Points 6618

Oui, vous pouvez le faire. Il existe un formatage conditionnel. Voir Formatage conditionnel dans MSDN

eg :

string MyString = number.ToString("+0;-#");

où chaque section séparée par un point-virgule représente des nombres positifs et négatifs.

ou :

string MyString = number.ToString("+#;-#;0");

si vous ne voulez pas que le zéro ait un signe plus.

1 votes

Correction d'un bug à cause duquel les négatifs n'obtenaient pas de moins.

0 votes

Merci beaucoup ! Je me suis cassé la tête pendant une heure pour savoir quel est l'équivalent du drapeau '+' de printf en C# et vous m'avez donné LA réponse.

5 votes

Con +#;-# Pour la valeur 0, j'obtiens juste "+", sans le 0 réel. Pour moi, je veux que le 0 apparaisse comme "+0", donc cela fonctionne : +#;-#;+0 .

57voto

Luk Points 2602

Attention, lors de l'utilisation de la mise en forme conditionnelle, la valeur négative ne reçoit pas automatiquement un signe. Vous devez faire

string MyString = number.ToString("+#;-#;0");

0 votes

Comme d'autres l'ont souligné, +0;-# vous donne le même résultat avec un code plus propre.

44voto

Edward Points 1522

Vous pouvez également utiliser des chaînes de format dans string.Format() ; la chaîne de format est séparée de l'index par deux points (':').

var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);

Pour le nombre { +1, -1, 0 } cela donne :

1, Signe de force +1, Pas de signe pour le zéro +1
-1, Forcer le signe -1, Pas de signe pour le zéro -1
0, signe fort +0, pas de signe pour le zéro 0

Vous pouvez également utiliser une chaîne interpolée au lieu de string.Format pour obtenir le même résultat :

var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";

0 votes

La dernière ligne de votre réponse devrait dire "Default format 0, Force sign +, No sign for zero 0." parce que c'est le résultat réel de +#;-# format pour la valeur 0

0 votes

Merci, Kamil - ça m'a échappé. J'ai maintenant corrigé le format du signe de force : +#;-#;+0 (au lieu de +#;-#)

1 votes

Vous pouvez obtenir le comportement du signe de la force avec un format plus simple : +0;-# . :)

12voto

Kamil Szot Points 4521

Contrairement aux autres réponses, il semble que si vous voulez obtenir +1, -1, +0 (pour les arguments 1, -1, 0), vous devez utiliser le format :

String.Format("{0:+#;-#;+0}", 0));  // output: +0

ou

String.Format("{0:+0;-#}", 0));  // output: +0

Si vous utilisez seulement +#;-# il affichera seulement + (pas +0 ) pour 0.

Le spécificateur personnalisé "#"https://msdn.microsoft.com/en-us/library/0c899ak8.aspx )

Notez que ce spécificateur n'affiche jamais un zéro qui n'est pas un chiffre significatif, même si zéro est le seul chiffre de la chaîne. Il n'affiche le zéro que s'il s'agit d'un chiffre significatif dans le nombre affiché.

Gardez également à l'esprit que si vous avez besoin d'une précision décimale, vous devez la spécifier de cette manière :

String.Format("{0:+0.##;-#.##}", 0));  // output: +0

ou, si vous ne voulez pas que les zéros apparaissent toujours, comme ça :

String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00

1voto

Tom Blodget Points 6626

Pour une expression numérique de n'importe quel type :

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0

Utilisez trois parties pour trois cas : positif, négatif, zéro.

Autres aspects de l'exemple :

  • Le zéro n'est pas signé. Vous pouvez le faire apparaître comme n'importe quoi, comme "zéro".

  • Les valeurs absolues inférieures à un ont un 0 devant le point décimal. Ajuster au goût du jour.

  • Le nombre de chiffres correspond aux valeurs décimales absolues les plus grandes et les plus petites. Ajustez à votre goût.

  • Le caractère du point décimal est spécifique à la culture. Les substituts .NET.

  • Les séparateurs de groupements sont facultatifs. Le caractère est spécifique à la culture. .NET le remplace. (Les positions sont également spécifiques à la culture, mais cela est uniquement contrôlé par votre chaîne de format). Vous pouvez également utiliser n'importe quel autre caractère, à l'exception des caractères spéciaux pour le format (qui comprennent , . # 0).

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