Forcing signe positif double en .Net String.Format
-
24-09-2019 - |
Question
Contexte: .Net, C #
Je veux imprimer un nombre complexe composé de deux doubles. Le signe doit montrer sur la partie imaginaire. Je voudrais utiliser la valeur par défaut à double mise en forme pour chaque partie afin de minimiser le nombre de caractères.
J'ai essayé d'utiliser String.Format ( "{0: + G; -G} {1: + G, -G} j", réel, imaginaire), mais cela a fini par l'impression: "+ G-Gj". Pas tout à fait ce que je voulais.
Est-il possible de le faire en utilisant le spécificateur G ou dois-je faire un format personnalisé qui sacrifierait la commutation automatique de l'exposant, par exemple {. 1:. + # ###### e ###; - # ###### e ###} j "
La solution
il est inhabituel, mais vous pouvez facilement remplacer votre méthode ToString de la classe complexe. Par exemple:
class Complex {
private double mReal, mImaginary;
public Complex(double real, double imag) { mReal = real; mImaginary = imag; }
private string WithSign(double value) {
return value >= 0 ? "+" + value.ToString("N") : value.ToString("N");
}
public override string ToString() {
return WithSign(mReal) + "i" + WithSign(mImaginary);
}
}
Utilisation de l'échantillon:
static void Main(string[] args) {
var c = new Complex(1, -1);
Console.WriteLine(c.ToString());
Console.ReadLine();
}
Sortie:
+1.00i-1.00
Tweak si nécessaire.
Autres conseils
Ceci est probablement loin ...
Que diriez-vous quelque chose comme:
String.Format("+{0:g}-{0:g}{1:g}-{1:g}j", real, imaginary)