FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
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:
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. |
#9
|
|||
|
|||
Lo siento...me equivoque de post, saludos!
Última edición por cascarrabias fecha: 18-05-2008 a las 11:25:28. |
#10
|
|||
|
|||
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........... |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|