2009-10-16 24 views
6

¿Cómo convierto el siguiente código en C#¿Cuál es el equivalente de C# de Java DecimalFormat?

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); 

EDITAR El problema concreto es que no me gustaría que el separador decimal a cambiar con configuración regional (por ejemplo, algunos locales usarían '').

+0

sería más fácil para nosotros para ayudar si uno habla de la más alta l evel aim. –

+0

¿No hay un equivalente simple? El objetivo real es asegurarse de que los números FP en diferentes lugares mientras se conserva '.' como el separador decimal –

Respuesta

8

Por separador decimal se puede establecer en un caso NumberFormatInfo y utilizarlo con ToString:

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

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

para tener el resultado de su versión de Java, utilice la versión ToString() función con Custom Numeric Format Strings (es decir: lo que llamó patrón):

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

System.Globalization.NumberFormatInfo

3

En C#, decimal numbers se almacenan en el tipo decimal, con una representación interna que le permite realizar operaciones matemáticas decimales sin errores de redondeo.

Una vez que tenga el número, puede format usando Decimal.ToString() para fines de salida. Este formato es específico de la localidad; respeta su current culture setting.

+0

Para * controlar * el formato, use [Decimal.ToString (IFormatProvider)] (https://msdn.microsoft.com/en-us/library/3ebe5aks.aspx) – ToolmakerSteve

Cuestiones relacionadas