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 "

Était-ce utile?

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top