Pregunta Intentando establecer el separador decimal para el idioma actual, obteniendo "La instancia es solo de lectura"


Tengo un código que se escribió originalmente para un mercado en idioma inglés donde el separador decimal es "." por lo que está esperando valores numéricos como cadenas para usar "." como el separador. Pero ahora tenemos usuarios en otros lugares, por ejemplo, lugares en Europa donde el separador decimal es ",".

Por lo tanto, en el contexto de mi software (en realidad, solo el hilo actual) quiero reemplazar el separador decimal para que el idioma actual sea "". incluso si por defecto es otra cosa.

Lo intenté

  String sep = "."; 
  NumberFormatInfo nfi1 = NumberFormatInfo.CurrentInfo;
  nfi1.NumberDecimalSeparator = sep;

Pero me sale un "La instancia es de solo lectura"excepción en la tercera línea. Aparentemente, NumberFormatInfo no se puede escribir. Entonces, ¿cómo se configura el separador decimal del idioma actual en un valor distinto al predeterminado?


5
2017-07-16 16:14


origen


Respuestas:


Necesita crear una nueva cultura y puede usar la cultura actual como plantilla y solo cambiar el separador. Luego debe establecer la cultura actual en la que acaba de crear, ya que no puede cambiar directamente la propiedad dentro de la cultura actual.

string CultureName = Thread.CurrentThread.CurrentCulture.Name;
CultureInfo ci = new CultureInfo(CultureName);
if (ci.NumberFormat.NumberDecimalSeparator != ".")
{
    // Forcing use of decimal separator for numerical values
    ci.NumberFormat.NumberDecimalSeparator = ".";
    Thread.CurrentThread.CurrentCulture = ci;
 }

12
2017-07-16 16:17



Puedes usar el Clone() método en el NumberFormatInfo instancia, que creará una versión mutable (es decir, IsReadOnly = false). A continuación, puede establecer el símbolo de moneda y / u otras opciones de formato numérico:

string sep = "."; 
NumberFormatInfo nfi1 = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
nfi1.NumberDecimalSeparator = sep;

1
2017-07-14 05:54