FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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? |
#2
|
||||
|
||||
¡Me olvidaba!
Gracias a todos de antemano |
#3
|
||||
|
||||
Cita:
Cita:
Basta con comprobar los datos de las variables SysUtils.ThousandSeparator SysUtils.DecimalSeparator
__________________
Progress Openedge https://abevoelker.com/progress_open...dered_harmful/ Delphi forever... |
#4
|
||||
|
||||
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
||||
|
||||
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. |
#6
|
||||
|
||||
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. |
#7
|
||||
|
||||
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.
|
#8
|
||||
|
||||
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
__________________
BlueSteel |
#9
|
||||
|
||||
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.
__________________
Herr Heins Faust |
#10
|
||||
|
||||
¿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 (aunque podrías recomponerla al finalizar... digo).
Código:
SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, '.'); SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND, ','); SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SMONDECIMALSEP, '.'); SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SMONTHOUSANDSEP, ',');
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre. |
#11
|
||||
|
||||
Cita:
|
#12
|
||||
|
||||
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. |
#13
|
||||
|
||||
Creo que la Jedi te permite seleccionar que componente deseas instalar... me parece que uno de los hilos esta.... si bien yo instalé todos... despues de buscar he encontrado algunos que me han servidor muchos... como tablas de memoria, el tab por enter, trabajar con imagenes, progresbar, y muchos otros...
Salu2
__________________
BlueSteel |
#14
|
||||
|
||||
Cita:
Código:
function CustomStrToFloat(S: string): Extended; var SWTS: string; // S sin separador de miles (S Without Thousand Separator) begin SWTS := S; while Pos(ThousandSeparator, SWTS) > 0 do SWTS := AnsiReplaceStr(SWTS, ThousandSeparator, ''); Result := StrToFloat(SWTS) end; Una variante de la función puede ser esta: Código:
function CustomStrToFloat(S: string): Extended; var Fmt: TFormatSettings; SWTS: string; // S sin separador de miles (S Without Thousand Separator) begin GetLocaleFormatSettings(GetSystemDefaultLCID, Fmt); Fmt.DecimalSeparator := DecimalSeparator; Fmt.ThousandSeparator := ThousandSeparator; SWTS := S; while Pos(ThousandSeparator, SWTS) > 0 do SWTS := AnsiReplaceStr(SWTS, ThousandSeparator, ''); Result := StrToFloat(SWTS, Fmt) end; 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); begin if ((Key < '0') or (Key > '9')) and (Key <> #8) then Key := #0; end; Saludos.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre. Última edición por mlara fecha: 18-05-2008 a las 16:09:32. |
#15
|
|||
|
|||
Lo siento...me equivoque de post, saludos!
Última edición por cascarrabias fecha: 18-05-2008 a las 11:25:28. |
#16
|
|||
|
|||
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........... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Separador de miles como separador decimal | jmselesan | OOP | 4 | 12-06-2011 22:21:54 |
Agregar separador de miles | mjjj | Varios | 5 | 21-11-2007 10:51:15 |
Formato de separador decimal | MaMu | Conexión con bases de datos | 4 | 28-06-2007 14:47:14 |
Como setear el separador decimal y el separador de miles en WIN98 | robertoe | API de Windows | 3 | 26-11-2006 17:12:02 |
dichoso separador decimal | Lepe | Conexión con bases de datos | 8 | 19-04-2004 21:48:25 |
|