Pregunta

Tengo un cuadro de texto de aceptar la entrada del usuario; Estoy tratando de utilizar esta entrada del usuario a rellenar este miembro de una de mis objetos de negocio:

public System.Decimal? ExchangeRate

La aplicación se localiza - Necesito para apoyar en los mismos cultivos tiempo que aceptan estas entradas como válidos: "1,5" y "1,5"

El código que tengo ahora es:

var culture = Thread.CurrentThread.CurrentUICulture;

int exchangeRate;
int.TryParse(txtExchangeRate.Text, NumberStyles.Number, culture, 
    out exchangeRate);

entity.ExchangeRate = exchangeRate;

Cuando la cultura del usuario se establece en una cultura que espera el formato "1,5" (una coma como separador decimal) - por ejemplo "ro-RO", quiero que el valor que se almacena en entity.ExchangeRate ser 1,5; Sin embargo, cuando se ejecuta el código anterior, que se convierte a 15 en vez.

¿Alguna sugerencia sobre cómo convertir estos diversos formatos para que los datos que se almacena en mi entidad de negocio es "1.5" (punto como separador decimal)?

Gracias.


Ustedes tenían razón -. Que tenía sentido para usar en lugar de Thread.CurrentThread.CurrentCulture Thread.CurrentThread.CurrentUICulture y decimal.TryParse en lugar de int.TryParse

Sin embargo, estos cambios todavía no resolvería mi problema. Y después de jugar un poco con el código un poco más, ahora puedo simplificar el problema a esto:

Estoy utilizando un control RadNumericTextBox telerik que imponen a los usuarios utilizar el formato correcto en función de su cultura. Por lo tanto, cuando Thread.CurrentThread.CurrentCulture se establece en "Ro-Ro", que sólo aceptará el formato de "1,5", y cuando se ha ajustado en "es-ES", sólo se acepta el formato "1.5".

Aquí está el código que estoy utilizando ahora:

decimal exchangeRate;
decimal.TryParse(txtExchangeRate.Text, out exchangeRate);
entity.ExchangeRate = exchangeRate;

Caso 1: La cultura actual es "es-ES" - de entrada aceptada es "1.5", de tipos de cambio se establece en 1,5 - todo funciona bien

.

Caso 2: La cultura actual es "Ro-Ro" - de entrada aceptada es "1,5", pero después de la ejecución de la línea de decimal.TryParse ..., de tipos de cambio se establece en 15 - mal , obviamente. También debería mencionar que en este caso, el valor de txtExchangeRate.Text también se muestra como "1,5" en la ventana de mi reloj.

Por lo tanto, parece que decimal.TryParse tendrá en cuenta la cultura actual, pero no puedo encontrar una manera de hacerlo funcionar adecuadamente para mí. ¿Alguna sugerencia?

¿Fue útil?

Solución

OK, aquí está el código que parece funcionar en ambos casos que he descrito en mi post anterior (1. cultura "Ro-Ro", como separador de coma decimal y 2. la cultura "es-ES", punto como separador decimal) :

decimal exchangeRate;
decimal.TryParse(txtExchangeRate.Text, NumberStyles.Any, 
       CultureInfo.InvariantCulture, out exchangeRate);
entity.ExchangeRate = exchangeRate;

Otros consejos

  1. Obviamente, int no puede sostener 1.5! :-) Uso flotar en su lugar.

  2. Uso CurrentCulture en lugar de CurrentUICulture. Mi cultura es fr-BE (por lo tanto, acepta 1,5 pero mi de Windows interfaz de usuario es el Inglés, que no lo hace).

  3. Me gustaría hacer la prueba float.Parse () tanto con CurrentCulture Y InvariantCulture: En el momento en que algunos programas aprendieron a aceptar "1,5", se utilizó todo el mundo para escribir "1.5". No hay nada que me molesta más de Excel que requiere que yo escriba 1,5 cuando digo 1.5! Además, aquí en Bélgica, la primera gubernamental año puso en marcha la declaración de impuestos basado en la Web, el sitio que ve obligado a utilizar comas en lugar de períodos como puntos decimales. Todo el mundo se preguntaba por qué se rechazaron las cifras consignadas! Así que sea agradable a sus usuarios y aceptar ambos.

FYI Sé que esto no es su problema, pero es un puntero para otras personas que podrían estar haciendo esto:

Cuando se establece su cultura, no se puede tener su aplicación sea capaz de manejar la entrada de diferentes culturas. Debe ser del tipo que ha especificado.

Por lo tanto, si se establece de transbordo rodado como la cultura, no va a entender tanto 1,5 y 1,5 como la misma cosa.

Probablemente debería utilizar CurrentCulture (en contraposición a CurrentUICulture) para la localización (por ejemplo, la fecha / formato de número).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top