Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-05-2012
noelr noelr is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 23
Poder: 0
noelr Va por buen camino
problemas cadenas y float

amigo las verdad estoy desesperado

por mas que he leído no logro solucionarlo no se por que no puedo convertir str a float


lo he intentado así y nomas no lo logro

Código Delphi [-]
stringValue := '12.3';

floatValue  := StrToFloat(stringValue);

tambien he visto: http://www.delphibasics.co.uk/RTL.asp?Name=StrToFloat

he leido en el foro y me he puesto a googlear las solución es la misma pero no me funciona uso delphi 2010 no tendrá que ver alguna configuración de mi equipo o que se yo gracias por su apoyo y perdon por hacer una pregunta tan básica
Responder Con Cita
  #2  
Antiguo 03-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola noelr.

Ese problema se ocasiona por la configuración regional del S.O. Nosotros usamos la coma como separador decimal mientras que los sajones el punto, por lo que seguramente tengas definido a la coma como símbolo decimal en Configuración regional y de idioma (panel de control).

Te propongo dos soluciones:
1)
Código Delphi [-]
var
  s: string;
  f: Single;
begin 
  s:= '12.3';
  DecimalSeparator:= '.'; // separador decimal ahora es '.'
  f:= StrToFloat(s);      // hacer la conversión
  DecimalSeparator:= ','; // restauramos separador decimal
  ...

2)
Código Delphi [-]
var
  s: string;
  f: Single;
begin
  s:= '12.3';
  s[Pos('.',s)]:= ',';  // encontrar punto, reemplazarlo por coma
  f:= StrToFloat(s);    // hacer la conversión
  s[Pos(',',s)]:= '.';  // restaurar cadena (se puede omitir si es innecesario)
  ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-05-2012 a las 08:37:28. Razón: tabular comentarios
Responder Con Cita
  #3  
Antiguo 03-05-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
También puedes poner '12,3' con coma y no con punto.
Responder Con Cita
  #4  
Antiguo 03-05-2012
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Si el valor es ingresado dentro de tu aplicacion, lo que podes hacer es manjear por defecto el valor que se ingresa por teclado.
En este caso si necesitas que sea "," validar que es lo que se ingresa y cambiar por lo que necesites.

y tambien vas a poder configurar con el valor

en este hilo se habla del tema

http://www.clubdelphi.com/foros/show...usandseparator
Responder Con Cita
  #5  
Antiguo 03-05-2012
noelr noelr is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 23
Poder: 0
noelr Va por buen camino
creo que lo mas fácil seria usar la opción que propone ecfisa por que ya tengo la base de datos de unos 12000 registros

gracias a todos por sus respuestas, pero me surge otra duda que pasara si ejecuto mi aplicación en una maquina que tenga una configuración diferente?

por la noche que llegue a mi casa aplicare las soluiones que me pasaron

gracias una vez mas
Responder Con Cita
  #6  
Antiguo 03-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola noelr.
Cita:
gracias a todos por sus respuestas, pero me surge otra duda que pasara si ejecuto mi aplicación en una maquina que tenga una configuración diferente?
Podes evaluar la configuración del separador decimal y luego hacer la conversión:
Código Delphi [-]
function StrToFloatDSep(Value: string): Double;
begin
  if(DecimalSeparator = '.') and (Pos(',',Value) > 0) then
    Value[Pos(',',Value)]:= '.';
  if(DecimalSeparator = ',') and (Pos('.',Value) > 0) then
    Value[Pos('.',Value)]:= ',';
  Result:= StrToFloat(Value);
end;
O del mismo modo con la función StringReplace
Código Delphi [-]
function StrToFloatDSep(Value: string): Double;
begin
  if(DecimalSeparator = '.') and (Pos(',',Value) > 0) then
    Value:= StringReplace(Value,',','.',[]);
  if(DecimalSeparator = ',') and (Pos('.',Value) > 0) then
    Value:= StringReplace(Value,'.',',',[]);
  Result:= StrToFloat(Value);
end;
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 03-05-2012 a las 20:23:44.
Responder Con Cita
  #7  
Antiguo 03-05-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por noelr Ver Mensaje
pero me surge otra duda que pasara si ejecuto mi aplicación en una maquina que tenga una configuración diferente?
Nada, no debería pasar nada. Una aplicación no tendría porqué estar manipulando la configuración regional. Si tu usuario tiene configurado su sistema para usar coma como separador decimal entonces escribirá comas como separador decimal (esto debería ser obvio) y funciones como StrToFloat no fallarán. Lo mismo sucede si usa punto.

La única razón para tener que meterse en esos menesteres es que lo que escribe el usuario (coma o punto) difiera de lo que [el mismo usuario] tiene configurado en su sistema. Y bueno, ahí sí, lo que el cliente pida...

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas en D7 con cadenas grandes JCarlosas Varios 5 02-02-2009 21:43:41
problemas para comparar 2 cadenas spyfenix OOP 2 18-12-2007 18:44:48
Problemas con los float tato Varios 2 03-04-2006 12:57:38
Problemas con float.... ilichhernandez Varios 2 20-12-2005 17:19:20
Problemas al Isertar Cadenas con SQLQuery de DBExpress chivofbv Conexión con bases de datos 0 10-11-2004 20:53:35


La franja horaria es GMT +2. Ahora son las 11:33:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi