代码之家  ›  专栏  ›  技术社区  ›  Max Yaffe

在.NET string.format中强制对double执行正号

  •  2
  • Max Yaffe  · 技术社区  · 15 年前

    上下文:.net,c#

    我想打印一个由两个双倍组成的复数。符号需要显示在想象的部分。我想为每个部分使用默认的双重格式,以最小化字符数。

    我试过使用string.format(“{0:+g;-g}{1:+g;-g}j”,实数,虚数),但最后打印的是:“+g-gj”。不是我想要的。

    有什么方法可以使用g说明符来实现这一点,或者我需要做一个自定义格式来牺牲自动切换指数的功能,比如{1:++35 35是的

    2 回复  |  直到 15 年前
        1
  •  3
  •   Hans Passant    15 年前

    这是不寻常的,但是可以很容易地重写复杂类的toString方法。例如:

      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
    

    根据需要调整。

        2
  •  0
  •   NitroxDM    15 年前

    这可能离…

    比如说:

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