2010-04-06 6 views
2

Contexte: .Net, C#Obliger signe positif double en .Net String.Format

Je veux imprimer un nombre complexe composé de deux doubles. Le signe doit montrer sur la partie imaginaire. Je voudrais utiliser le double formatage par défaut 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 imprimer: "+ G-Gj". Pas tout à fait ce que je voulais.

Y a-t-il un moyen de le faire en utilisant le spécificateur G ou ai-je besoin de faire un format personnalisé qui sacrifierait la commutation automatique de l'exposant, par ex. {. 1: + # ###### e ###; - # ###### e ###.} J »

Répondre

3

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); 
    } 
    } 

exemple d'utilisation:

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.

+0

Tweaked comme suit, cela fera l'affaire. re.ToString ("G") + (im.CompareTo (0.0)> = 0? "+": "") + Im.ToString ("G") + "j"; –

0

Ceci est probablement loin ...

Que diriez-vous quelque chose comme:

String.Format("+{0:g}-{0:g}{1:g}-{1:g}j", real, imaginary)