![]() |
Separador decimal y de miles, problemas con distintas configuraciones
Tengo instalada una aplicación en diferentes equipos, que están por toda España y que cada uno tiene una configuración regional distinta y tengo el típico problema con los separadores decimales y de miles porque cada ordenador está configurado de un modo diferente y en la mayoría de los casos no puedo cambiar esa configuración.
Ya he revisado los hilos sobre este tema y: No me funciona correctamente (tal vez lo estoy poniendo en el lugar incorrecto), ahora mismo lo tengo en el onCreate de mi formulario principal, el del menú. También he probado a "hacerlo a mano", pasando cada número por funciones que sacan los puntos, pero como unos usan la coma y otros el punto como separador decimal y nunca sé en que caso me encuentro... tampoco funciona bien. Encontré también en el foro que en torry.net hay algún tEdit que sólo permite introducir números y la idea me pareció perfecta... pero la página sigue caída :( Mi problema con cantidades como: 1.627,63 o su otra versión 1,627.63, o esta 1627,63, o esta 1627.63; escritas tal cual en un edit, con el teclado numérico o con el otro o incluso copiadas desde un documento excel (ya he visto de todo en el manejo de la aplicación). ¿Cómo proceso esto? "strToFloat" no admite como números los que tienen ambos separadores o los transforma mal... ¿Cómo detecto cual es la configuración de un ordenador? ¿Alguien tiene los componentes de torry.net para que pueda ver si me sirven? ...¿Alguna sugerencia? :confused: |
¡Me olvidaba!
Gracias a todos de antemano :) |
Cita:
Cita:
Cita:
SysUtils.ThousandSeparator SysUtils.DecimalSeparator |
En hilos relacionados tienes el "dichoso separador decimal" que tiene varias cositas en cuenta:
- cambiar el punto del teclado numérico por la coma (para usarlo como separador decimal) - cambiar los sysutils.decimalSeparator en controles ad-aware. Otra solución es heredar tú misma de TEdit, añadiendo un par de propiedades (como lo hace el DBEdit): - DisplayFormat - EditFormat (quizás más complicada) - AsValue:Extended Saludos |
Lo que he hecho por el momento pero aún no he probado es:
* Añadir el cambio del punto del teclado decimal por una coma, tal como sale en el hilo "dichoso separador decimal" * Modificar una rutina propia que uso en las operaciones con dinero para eliminar el separador de miles antes de nada. Ahora toca instalarlo en los 3 sitios que me han avisado de los problemas y esperar. Os mantendré informados. |
Punto decimal
estare al tanto de tu avance, ya que ese tema tambien me afectara a futuro. Por favor no te olvides publicar como te fue.
Gracias de antemano. |
Por el momento ha bajado considerablemente el número de avisos de error del tipo "invalid floating point value", pero aún me llegan algunos. Estoy revisando si son por otra causa nueva o por un error.
|
Cita:
yo he solucionado en parte ese problema con el componente JvValidateEdit de la JVC (Jedi)... lo bueno del componente es que puedes decir que tome solo numeros.... además el mismo tiene las sgtes caracteristicas .text .AsCurrency .AsFloat por lo cual, cuando tengo un texto y debo pasarle el valor al componente solo lo uso en el .text... si tengo un valor de punto flotante (decimales) lo hago con el .AsFloat... y si el valor viene con formato de pesos (moneda)... utilizo el .AsCurrency...
Salu2:p:D |
Hace poco pedí ayuda sobre TFormatSettings y como usarlo con algunas funciones como FloatToSTrF, pero solo BlueSteel me respondió y no era exactamente lo que buscaba, he hecho algunas pruebas y parece que se puede hacer esto, GetLocaleFormatSettings recupera de la configuración del sistema operativo que uses ciertas configuraciones para mostrar valores, ojalá te sirva de algo.
|
¿Por qué no cambias la configuración regional desde tu programa?
Pues yo me evité muchos inconvenientes haciéndolo... claro, ojalá tus clientes no se enojen porque cada vez que inician tu aplicación su config. regional cambia :D (aunque podrías recomponerla al finalizar... digo).
Código:
SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, '.'); |
Cita:
|
Precisamente lo que inicialmente buscaba era un componente que solucionase parte del problema BlueSteel, pero no quiero bajarme todo lo que hay en Jedi para usar sólo una cosa. También quería probar un componente que está en Torry pero justo cuando me surgió este problema la página no funcionaba.
Si alguien sabe de dónde puedo descargar algo así que me lo diga. Gracias por la referencia Faust, pero ya tenía implementado algo así y no era suficiente, por eso hice la consulta y ahora estoy informando de los progresos, como dije que haría. |
Cita:
Salu2:p:D |
Cita:
Código:
function CustomStrToFloat(S: string): Extended; Una variante de la función puede ser esta: Código:
function CustomStrToFloat(S: string): Extended; Por otra parte leí que querías usar como alternativa un TEdit que permitiera únicamente registrar números. Bueno, pues esto es muy sencillo, pues únicamente es necesario escribir el evento OnKeyPress: Código:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); Saludos. |
Lo siento...me equivoque de post, saludos!
|
Perfecto.........
Mismo problema de Conf. Regional..........
Con todas las opciones que discutian llegue a la conclusion de modificar el ed.text en la propiedad keypress....solo numeros y decimales in '0'..'9' or ',' '.' y con el ThousandSeparator..... entrega si es coma o punto y con strtofloat funciona para cualquier conf.regional.......... Gracias a todos y al foro........... |
La franja horaria es GMT +2. Ahora son las 18:25:45. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi