web-dev-qa-db-ja.com

C#10進数を指定形式の文字列に変換する

10進数aを文字列bに変換する必要があります:

  • bは避難所でなければなりません'.' キャラクター。例えば:
    • a = 12-> b = "12.0"
    • a = 1.2-> b = "1.2"
    • a = 1.234-> b = "1.234"

どうすれば1つのコマンドでそれを行うことができますか?

  • bはちょうど10文字でなければなりません。例えば:
    • a = 101-> b = "101.000000"
    • a = 1.234-> b = "1.23400000"
    • a = 1.234567891-> b = "1.23456789"

(1と同じ質問)

7
tamhoang
decimal a = 12;
var b = a.ToString("N1"); // 12.0

a = 1.2m;
b = a.ToString(); // 1.2

a = 101m;
b = a.ToString("N10"); // 101.0000000000

a = 1.234m;
b = a.ToString("N10"); // 1.2340000000

質問の2番目の部分-合計の長さが10である場合:

decimal a = 1.234567891m;
int numberOfDigits = ((int)a).ToString().Length;
var b = a.ToString($"N{9 - numberOfDigits}"); //1.23456789

//Or before C# 6.0
var b = a.ToString("N" + (9 - numberOfDigits)); //1.23456789

基本的に((int)number).ToString().Length.の前の桁数を提供し(intに変換すると端数が削除されます)、次に.の後の桁数からそれを減らします(さらに-1小数点自体)

8
Gilad Green

.ToString()を使用して、このタスクを実行できます。

decimal aDecimalVal = 10.234m;
string decimalString = aDecimalVal.ToString("#.000"); // "10.234"
aDecimalVal.ToString("#.00"); // "10.23"
aDecimalVal.ToString("#.0000"); // "10.2340"

0 後に .書式文字列で、10進数文字列の桁数を決定します。

pdates:小数点以下の桁数を求めたいので、コードの変更は次のようになります。

decimal aDecimalVal = 10.2343455m;
int count = BitConverter.GetBytes(decimal.GetBits(aDecimalVal)[3])[2];
string formatString = String.Format("N{0}",count.ToString());
string decimalString = aDecimalVal.ToString(formatString); // "10.2343455"
2

Doubleを使用してなんとかします。これが必要ですか?質問の後半部分はあまりわかりません。

    double a = 12;
    string b = a.ToString("0.0000000000######");
    Console.WriteLine(b);
1
active92

最初の方法では、変数の桁数がわからない場合は、拡張メソッドを使用できます。

public static string ToSpecificFormat(this decimal value)
{
    var count = BitConverter.GetBytes(decimal.GetBits(value)[3])[2];
    return value.ToString(count == 0 ? "N1" : "N" + count);
}

これにより、出力に少なくとも1桁あることを確認します。

2番目の問題の場合、選択した回答は、1000000000より大きい場合は失敗します。

public static string ToFixedLength(this decimal value)
{
    if (value >= 1000000000m) return value.ToString("N0");

    var format = 9 - Math.Floor(value).ToString().Length;
    return value.ToString("N" + format);
}

出力:

1.234m.ToFixedLength(); // 1.23400000
101m.ToFixedLength(); // 101.000000
123456789123m.ToFixedLength(); // 123,456,789,123
0
Stephen Zeng

結果を文字列にしたい場合は、解析して小数点以下1桁にフォーマットします。

string strTemp = 12;
double temp = Double.Parse(strTemp, CultureInfo.InvariantCulture);
string result = temp.ToString("N1", CultureInfo.InvariantCulture);

小数点以下2桁に四捨五入します。 27.658 => 27.66

常に小数点以下2桁になるようにしてください。 12 => 12.00、12.5 => 12.50

通貨金額に適しています。

strTemp.ToString("F");
0
TechnicalKalsa