12

浮動小数点数を x 文字 (私の場合は小数点を含めて 6) にフォーマットする必要があります。私の出力には、数字の符号も含める必要があります

したがって、入力が与えられた場合、期待される出力は次のとおりです

1.23456   => +1.2345

-12.34567 => -12.345

-0.123456 => -0.1234

1234.567  => +1234.5

最後の文字の前には常に小数点があると仮定してください。つまり、数値の入力はありません 。12345.6入力は常に以下になり9999.9ます。

これは条件付きで行う必要があると思います。

4

7 に答える 7

4

あなたは「x文字」について言及します。したがって、これを「x-1桁」に簡略化して、x桁を表示するコードを記述できます。

「G」数値形式指定子をに渡すことDouble.ToString()は、可能な限り組み込みに近いと思います。

double d = 1234.56789;
string s = d.ToString("G6");           // "1234.57"

したがって、これを展開して、先頭に「+」を手動で追加します。

if (d > 0)
    s = "+" + s;

すべてを拡張メソッドにまとめます。

編集:切り捨てるためのオプションのパラメータが含まれています

public static string ToStringWithSign(this double d, int digits, bool truncate = false)
{
    if (truncate) {
        double factor = Math.Pow(10, digits - 1);
        d = Math.Truncate(d * factor) / factor;
    }

    string s = d.ToString("G" + digits);
    if (d > 0)
        s = "+" + s;
    return s;
}

結果:

(1234.56789).ToStringWithSign(4);      // "+1235"
(1234.56789).ToStringWithSign(5);      // "+1234.6"
(1234.56789).ToStringWithSign(6);      // "+1234.57"
(-1234.56789).ToStringWithSign(6);     // "-1234.57"

(1.2345678).ToStringWithSign(6);       // "+1.23457"
(1.2345678).ToStringWithSign(6, true); // "+1.23456"
于 2012-08-03T04:38:08.330 に答える
2

切り捨てが必要な場合:

string str = number.ToString("+0.00000;-0.00000").Substring(0,7);

丸めたい場合:

string str = number.ToString("+0.0000;-0.0000");

編集: 必要に応じて、桁数をパラメーターとして受け取る単純なラッパーを作成できます。

string FormatDecimal(decimal value, int digits )
{
    return value
        .ToString(String.Format("+0.{0};-0.{0}", new string('0',digits - 2)))
        .Substring(0,digits+1);
}
于 2012-08-03T05:06:48.607 に答える
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));
        }
     }
  }

出力:

  +1.2345
  -12.345
  -0.1234
  +1234.5
  +0.0000
  +1.1000

編集

後続のゼロを切り落とさないことに注意してください。

于 2012-08-03T05:11:08.390 に答える
1

小数点を含めて6文字に出力したい場合は、これを見ることができると思います

double val1 = -99.56789;
//string strval = val1.ToString("+#.######;-#.######");// add # for additional decimal places
string strval = val1.ToString("+#.000000;-#.000000");    
Console.WriteLine(strval.Substring(0,strval.Length >= 7 ? 7 : strval.Length));
 //output -99.567 if positive would output +99.567

値を文字列に変換し、出力された文字列から関連する 6 文字 (追加の文字は記号用) を取得するだけです。

この場合、丸めはなく、あなたのニーズに合っています。これがあなたが探しているものであることを願っています.

于 2012-08-03T05:06:49.567 に答える
0

これを試して:

        double myDouble = 1546.25469874;
        string myStr = string.Empty;
        if (myDouble > 0)
        {
            myStr = myDouble.ToString("+0.0###");
        }
        else
        {
            myStr = myDouble.ToString("0.0####");
        }
        if (myStr.Length > 7)
        {
            myStr = myStr.Remove(7).TrimEnd('.');
        }
于 2012-08-03T04:41:15.353 に答える
0

これはあなたが望むことをするはずです。ただし、最後の桁は丸めます。

static string Format(double d)
{
    // define how many number should be visible
    int digits = 5;

    // Get the left part of the number (ignore negative sign for now)
    int s = Math.Abs(d).ToString("####0").Length;

    // Total size minus the amount of numbers left of the decimal point
    int precision = digits - s;

    // Left side for positive, right side for negative.
    // All it's doing is generating as many 0s as we need for precision.
    string format = String.Format("+###0.{0};-###0.{0}", new String('0', precision));
    return d.ToString(format);
}

あなたの入力を考えると、これは以下を返します:

+1.2346
-12.346
-0.1235
+1234.6

ゼロを問題なく処理します。

+0.1000
+0.0000
+1000.0
于 2012-08-03T04:58:58.557 に答える
-2

ここで MSDN が述べているように、「0」は数字のプレースホルダーです。したがって、必要なのは次のとおりです。

myDecimal.ToString("000000");

また

myDecimal.ToString("######");

ゼロの代わりに数字を表示したくない場合。

于 2012-08-03T04:32:31.467 に答える