7

次のコードをC#に変換するにはどうすればよいですか?

DecimalFormat form 
String pattern = "";
for (int i = 0; i < nPlaces - nDec - 2; i++) {
        pattern += "#";
}
pattern += "0.";
for (int i = nPlaces - nDec; i < nPlaces; i++) {
        pattern += "0";
}
form = (DecimalFormat) NumberFormat.getInstance();
DecimalFormatSymbols symbols = form.getDecimalFormatSymbols();
symbols.setDecimalSeparator('.');
form.setDecimalFormatSymbols(symbols);
form.setMaximumIntegerDigits(nPlaces - nDec - 1);
form.applyPattern(pattern);

編集特定の問題は、小数点記号をロケールで変更したくないことです(たとえば、一部のロケールでは「、」を使用します)。

4

2 に答える 2

9

小数点の場合は、NumberFormatInfoインスタンスに設定して ToString で使用できます。

    NumberFormatInfo nfi = new NumberFormatInfo();
    nfi.NumberDecimalSeparator = ".";

    //** test **
    NumberFormatInfo nfi = new NumberFormatInfo();
    decimal d = 125501.0235648m;
    nfi.NumberDecimalSeparator = "?";
    s = d.ToString(nfi); //--> 125501?0235648

Java バージョンの結果を取得するには、ToString()関数バージョンをカスタム数値書式文字列(つまり、パターンと呼んだもの)で使用します。

s = d.ToString("# ### ##0.0000", nfi);// 1245124587.23     --> 1245 124 587?2300
                                      //      24587.235215 -->       24 587?2352

System.Globalization.NumberFormatInfo

于 2009-10-16T08:30:56.817 に答える
3

C# では、10 進数は型に格納され、decimal丸め誤差なしで 10 進数の計算を実行できる内部表現が使用されます。

数値を取得したら、出力目的でDecimal.ToString()を使用して書式設定できます。このフォーマットはロケール固有です。それはあなたの現在の文化設定を尊重します。

于 2009-10-16T08:27:06.403 に答える