String.Format - 如何格式化为x位数(无论小数位)?

Sim*_*mon 12 c# decimal-point string-formatting

我需要将浮点数格式化为x个字符(在我的情况下为6,包括小数点).我的输出还需要包含数字的符号

所以给定输入,这是预期的输出

1.23456   => +1.2345

-12.34567 => -12.345

-0.123456 => -0.1234

1234.567  => +1234.5
Run Code Online (Sandbox Code Playgroud)

请假设在最后一个字符之前总是有一个小数位.即没有 12345.6数字输入 - 输入将始终小于或等于9999.9.

我想这必须有条件地完成.

Mic*_*zyk 1

这是一种无需格式字符串(“F”除外)的透明方法:

  static void Main()
  {
     double y = 1.23456;
     Console.WriteLine(FormatNumDigits(y,5));
     y= -12.34567;
     Console.WriteLine(FormatNumDigits(y,5));
     y = -0.123456;
     Console.WriteLine(FormatNumDigits(y,5));
     y = 1234.567;
     Console.WriteLine(FormatNumDigits(y,5));

     y = 0.00000234;
     Console.WriteLine(FormatNumDigits(y,5));

     y = 1.1;
     Console.WriteLine(FormatNumDigits(y,5));
  }


  public string FormatNumDigits(double number, int x) {
     string asString = (number >= 0? "+":"") + number.ToString("F50",System.Globalization.CultureInfo.InvariantCulture);

     if (asString.Contains('.')) {
        if (asString.Length > x + 2) {
           return asString.Substring(0, x + 2);
        } else {
           // Pad with zeros
           return asString.Insert(asString.Length, new String('0', x + 2 - asString.Length));
        }
     } else {
        if (asString.Length > x + 1) {
           return asString.Substring(0, x + 1);
        } else {
           // Pad with zeros
           return asString.Insert(1, new String('0', x + 1 - asString.Length));
        }
     }
  }
Run Code Online (Sandbox Code Playgroud)

输出:

  +1.2345
  -12.345
  -0.1234
  +1234.5
  +0.0000
  +1.1000
Run Code Online (Sandbox Code Playgroud)

编辑

请注意,它不会截断尾随零。