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# 中,十进制数字存储在decimal类型中,其内部表示允许您执行十进制数学而不会出现舍入错误。

获得数字后,您可以使用Decimal.ToString()对其进行格式化以用于输出目的。这种格式是特定于语言环境的;它尊重您当前的文化设置

于 2009-10-16T08:27:06.403 回答