如何将以下代码转换为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);
编辑特别的问题是我不希望小数分隔符随Locale一起更改(例如,某些Locales会使用',')。
答案 0 :(得分:8)
对于小数分隔符,您可以在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()
函数版本与Custom Numeric Format Strings一起使用(即:所谓的模式):
s = d.ToString("# ### ##0.0000", nfi);// 1245124587.23 --> 1245 124 587?2300
// 24587.235215 --> 24 587?2352
答案 1 :(得分:3)
在C#中,decimal numbers存储在decimal
类型中,内部表示允许您执行十进制数学运算而不会出现舍入错误。
获得该号码后,您可以使用format Decimal.ToString()进行输出。此格式是特定于语言环境的;它尊重您的current culture setting。