2009-10-16 161 views
6

如何将我下面的代码转换为C#什么是Java DecimalFormat的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); 

编辑的具体问题是,我不希望小数点分隔符与语言环境以改变(例如某些地区会使用“”)。

+0

这将是我们更容易帮助,如果你提到的较高的L evel目标。 – 2009-10-16 08:23:53

+0

没有简单的等价物吗?实际目标是确保在不同地区的FP编号保持'。'作为十进制分隔符 – 2009-10-16 08:27:50

回答

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 

System.Globalization.NumberFormatInfo

3

在C#中,decimal numbers存储在decimal类型中,其内部表示允许您在不舍入错误的情况下执行小数运算。

一旦你有号码,你可以format它使用Decimal.ToString()出于输出的目的。这种格式是特定于语言环境的;它尊重你的current culture setting

+0

要控制格式,请使用[Decimal.ToString(IFormatProvider)](https://msdn.microsoft.com/zh-cn/library/3ebe5aks.aspx) – ToolmakerSteve 2015-09-23 16:26:54

相关问题