Domanda

Contesto: .Net, C #

Voglio stampare un numero complesso composto da due doppie. Il segno ha bisogno di mostrare sulla parte immaginaria. Mi piacerebbe usare il doppio formattazione predefinita per ogni parte per ridurre al minimo il numero di caratteri.

Ho provato ad utilizzare String.Format ( "{0: + G; -G} {1: + G; -G} j", reale, immaginario) ma questo finito per la stampa: "+ G-Gj". Non è proprio quello che volevo.

Esiste un modo per fare questo usando l'identificatore G o ho bisogno di fare un formato personalizzato che avrebbe sacrificare auto-switching l'esponente, per esempio {. 1:. + # ###### e ###; - # ###### e ###} j "

È stato utile?

Soluzione

è insolito, ma si può facilmente ignorare metodo ToString della vostra classe Complex. Ad esempio:

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

Utilizzo di esempio:

  static void Main(string[] args) {
    var c = new Complex(1, -1);
    Console.WriteLine(c.ToString());
    Console.ReadLine();
  }

Output:

  +1.00i-1.00

Tweak se necessario.

Altri suggerimenti

Questo è probabilmente lontano ...

Che ne dite di qualcosa di simile a:

String.Format("+{0:g}-{0:g}{1:g}-{1:g}j", real, imaginary)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top