Принудительный положительный знак двойного в .Net String.Format - PullRequest
2 голосов
/ 07 апреля 2010

Контекст: .Net, C #

Я хочу напечатать комплексное число из двух двойных чисел. Знак должен показывать на мнимой части. Я хотел бы использовать двойное форматирование по умолчанию для каждой части, чтобы минимизировать количество символов.

Я пытался использовать String.Format ("{0: + G; -G} {1: + G; -G} j", реальное, воображаемое), но в итоге получилось вывести: "+ G-Gj". Не совсем то, что я хотел.

Есть ли способ сделать это, используя спецификатор G, или мне нужно сделать собственный формат, который принесет в жертву автоматическое переключение показателя степени, например, {. 1: + # ###### е ###; - # ###### е ###.} J "

Ответы [ 2 ]

3 голосов
/ 07 апреля 2010

это необычно, но вы можете легко переопределить метод ToString вашего класса Complex. Например:

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

Пример использования:

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

Выход:

  +1.00i-1.00

Настроить по необходимости.

0 голосов
/ 07 апреля 2010

Это, вероятно, далеко ...

Как насчет чего-то вроде:

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