Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problemas cadenas y float (https://www.clubdelphi.com/foros/showthread.php?t=78602)

noelr 03-05-2012 06:57:50

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

ecfisa 03-05-2012 07:31:16

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.

Casimiro Notevi 03-05-2012 09:20:28

También puedes poner '12,3' con coma y no con punto.

Enan0 03-05-2012 14:25:25

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

noelr 03-05-2012 18:32:13

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 :D

gracias una vez mas

ecfisa 03-05-2012 19:20:05

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.

roman 03-05-2012 19:51:59

Cita:

Empezado por noelr (Mensaje 431694)
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


La franja horaria es GMT +2. Ahora son las 22:59:48.

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