2

String.Formatdouble が次のように表示されるように、C# で使用するにはどうすればよいですか。

値:

-1.0
1.011
100.155
1000.25
11000.52221

表示文字列:

-1.00
1.011
100.2
 1000
11001

要点は、私の幅は何があっても5文字に固定されているということです。右側に表示される小数点以下の桁数はあまり気にしません。小数点の左側に 4 つ以上の数字がある場合は、小数点の右側のすべて (小数点自体を含む) を削除します。

それはかなり標準的な慣習であるべきもののようです。しかし、うまくいく答えを見つけるのはあまり運がありません。

上記の表示文字列にいくつかの修正が加えられました。丸めが必要です。

ありがとう!

4

3 に答える 3

3

通常、このルールは為替市場に適用され、以下のように展開します。

if (number < 1)
   cell.Value = number.ToString("0.00000");
else if (number < 10)
   cell.Value = number.ToString("0.0000");
else if (number < 100)
   cell.Value = number.ToString("00.000");
else if (number < 1000)
   cell.Value = number.ToString("000.00");
else if (number < 10000)
   cell.Value = number.ToString("0000.0");
else if (number < 100000)
   cell.Value = number.ToString("00000");
于 2013-02-26T05:04:23.090 に答える
2
public string FormatNumber(double number)
{
    string stringRepresentation = number.ToString();

    if (stringRepresentation.Length > 5)
        stringRepresentation = stringRepresentation.Substring(0, 5);

    if (stringRepresentation.Length == 5 && stringRepresentation.EndsWith("."))
        stringRepresentation = stringRepresentation.Substring(0, 4);

    return stringRepresentation.PadLeft(5);
}

編集:これは、必要に応じて(最初の例のように)小数点以下の末尾にゼロを埋め込まないことに気付きましたが、必要に応じてそれを終了するためのツールを提供する必要があります。

EDITx2:丸めを行うつもりの最新の追加を考えると、それはより複雑になります。最初に、小数点以下の桁数があるかどうか、および小数点以下の位置を確認する必要があります。次に、その小数点以下を四捨五入してから、おそらく出力を実行する必要があります。アルゴリズムによっては、丸めが数値をロールオーバーする誤った結果が得られる可能性があることに注意してください (たとえば、実装によってはまたはに-10.9999なる可能性があります)。-11.00-11

于 2012-09-28T15:22:29.703 に答える
1

頻繁に多くの場所で使用される場合は、Double で拡張メソッドを作成します。

using System;

public static class DoubleExtensionMethods
{
    public static string FormattedTo5(this double number)
    {
        string numberAsText = number.ToString();

        if (numberAsText.Length > 5)
        {
            numberAsText = numberAsText.Substring(0, 5);
        }

        return numberAsText.TrimEnd('.').PadLeft(5);
    }
}

使用法は次のようになります。

double myDouble = 12345.6789D;

string formattedValue = myDouble.FormattedTo5();
于 2012-09-28T15:29:00.230 に答える