web-dev-qa-db-fra.com

Format de chaîne numérique personnalisé pour toujours afficher le signe

Est-il possible de spécifier une chaîne de format numérique standard ou personnalisée pour toujours afficher le signe, qu'il soit + ve ou -ve (bien que ce qu'il devrait faire pour zéro, je ne suis pas sûr!)

171
Craig Shearer

Oui, vous pouvez. Il y a un formatage conditionnel. Voir Mise en forme conditionnelle dans MSDN

par exemple:

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.

274
gcores

Attention, lorsque vous utilisez le formatage conditionnel, la valeur négative n'obtient pas automatiquement un signe. Tu as besoin de faire

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

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, aucun signe pour zéro +1
- 1, signe de force -1, aucun signe pour zéro -1
0, signe de force +0, pas de signe pour 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}";
26
Edward

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 suivant:

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

ou

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

Si vous utilisez seulement +#;-# il n’affiche que + (ne 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 affichera zéro uniquement s'il s'agit d'un chiffre significatif dans le nombre affiché.

Veuillez également garder à l'esprit que si vous avez besoin d'une précision décimale, vous devez la spécifier comme ceci:

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
8
Kamil Szot

Pour une expression numérique de tout type:

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

Utilisez trois parties pour trois cas: positif, négatif, nul

Autres aspects de l'exemple:

  • Zero n'est pas signé. Vous pourriez l'avoir comme quoi que ce soit, tel que "zéro".

  • Les valeurs absolues inférieures à un sont précédées du 0 avant le point décimal. Ajustez au goût.

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

  • Le caractère décimal est spécifique à la culture. Substituts .NET.

  • Les séparateurs de groupe sont facultatifs. Le personnage est spécifique à la culture. Substituts .NET. (Les positions sont également spécifiques à la culture mais ne sont contrôlées que par votre chaîne de format.) Vous utilisez également tout autre caractère, à l'exception des caractères spéciaux pour Format (qui comprennent,. # 0).

0
Tom Blodget