Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Insertar un Carácter, antes de los 2 últimos carácter (https://www.clubdelphi.com/foros/showthread.php?t=88673)

maxzama 14-07-2015 20:47:35

Insertar un Carácter, antes de los 2 últimos carácter
 
Hola a Todos.

Necesito Insertar un carácter, antes de los Dos últimos carácter Impreso. Ej:

Valor = 12345

Insertar Coma (,)

123,45

// esto que pase con cualquier valor obtenido sin importar la cantidad de carácter

Como Puedo hacer en código, el siguiente ejemplo (Ya mostrado)?.

Espero sus respuesta por favor y gracias...

Casimiro Notevi 14-07-2015 20:51:52

http://www.delphibasics.co.uk/RTL.asp?Name=FormatFloat

maxzama 14-07-2015 22:08:56

Gracias por la ayuda Casimiro. Pero pasa lo siguiente:

Ya e colocado o insertado esto Dos código, el cual se acerca a lo que quiero(O eso muestra sus ejemplos).

Código Delphi [-]
ShowMessage('0.#### : '+FormatFloat('0.####', float)); Resultado:  1234.567

ShowMessage('#,##0 : '+FormatFloat('#,##0', float));                  resultado:  1,235

Aun así, no me da el resultado que busco.


Este es mi siguiente código con resultado:

Código Delphi [-]
 Memo2.Lines[0];
                for I := 0 to Memo2.Lines.Count-1 do
                begin
                    Cad:=Memo2.Lines[i];
                    
                    Monto:=copy(Cad,56,15);
                    Monto:=StringReplace(Monto, ',', '',[rfReplaceAll, rfIgnoreCase]);
                    Monto:= IntToStr(StrToInt(Monto));   //código para quitar los ceros a la izquierda
                    Float:=strtoint(Monto);
                    SHOWMESSAGE(FormatFloat('0.####', float)); //para colocar el siguiente caracter (,)   //resultado: 19062
                end;


Código Delphi [-]
Memo2.Lines[0];
                for I := 0 to Memo2.Lines.Count-1 do
                begin
                    Cad:=Memo2.Lines[i];
                    
                    Monto:=copy(Cad,56,15);
                    Monto:=StringReplace(Monto, ',', '',[rfReplaceAll, rfIgnoreCase]);
                    Monto:= IntToStr(StrToInt(Monto));   //código para quitar los ceros a la izquierda
                    Float:=strtoint(Monto);
                    SHOWMESSAGE(FormatFloat('#,#0', float)); //para colocar el siguiente caracter (,)   //resultado: 19,062
                end;

No se que me falta o que e colocado mal?.

Espero sus respuesta por favor y Gracias.

Casimiro Notevi 14-07-2015 22:43:29

Si quieres mostrar 2 decimales: #,##

maxzama 14-07-2015 23:25:48

Código Delphi [-]
Monto:=copy(Cad,56,15);
                    Monto:=StringReplace(Monto, ',', '',[rfReplaceAll, rfIgnoreCase]);
                    Monto:= IntToStr(StrToInt(Monto));
                    Float:=strtoint(Monto);
                    SHOWMESSAGE(FormatFloat('#,##', float));

Y resultado es el siguiente:

4790

Inserta la coma (,)

Resultado: 4,790
________________

Y si es de 5 caracteres pasa lo siguiente:
19062

inserta la coma (,)

Resultado: 19,062

Casimiro Notevi 14-07-2015 23:29:28

Seguramente tu sistema tiene puesto que el punto decimal en lugar de la coma. Cambia la coma por el punto: #.##

maxzama 14-07-2015 23:33:24

Y resultado es el siguiente:

4790

Inserta el punto (.)

Resultado: 4790

//Esto pasa con cualquier cantidad de caracteres que parezcan o se utilice...

Casimiro Notevi 14-07-2015 23:50:11

Pero claro, si has convertido la cadena de texto en un entero, sin decimales. No tienes un número, sino una cadena de caracteres, sin comas ni puntos.
En tu caso olvídate de float y todo lo demás, trátalo como una cadena de texto.

Copia en una variable de texto desde el principio de la cadena hasta length-2, le añades la coma y luego los caracteres que van después de length-2 hasta el final.

ecfisa 15-07-2015 00:59:13

Hola.

Si se trata de una cadena también puede usar el procedimiento Insert

Código Delphi [-]
// Inserta caracter en posición (de derecha a izquierda) 
function InsertPoint(Value: string; const Ch:Char; const PosChar: Integer): string;
begin
  Insert('.', Value, Length(Value)-PosChar+1);
  Result := Value;
end;
Ejemplo de uso:
Código Delphi [-]
...
var
  Monto: string;
  i : Integer;
begin
  Monto := '12345';
  Memo1.Clear;
  for i:= 1 to Length(Monto)-1 do
    Memo1.Lines.Add(InsertPoint(Monto, '.', i));
end;
El resultado:
Cita:

1234.5
123.45
12.345
1.2345
O simplemente:
Código Delphi [-]
var
  Monto: string;
begin
  Monto := '12345';
  Insert('.', Monto, 4); // 123.45

Saludos :)

BDWONG 15-07-2015 01:07:16

Hola
 
Espero esto sea lo que buscas

Código Delphi [-]
function insertCharacter(number:integer):string;
var
str:string;
begin
   str:=inttostr(number);
   if length(str)>2 then Insert(',',str,length(str)-1);

   Result:=str;
end;

var
numero:integer;
begin

 writeln(insertCharacter(123456));
 writeln(insertCharacter(123));
 writeln(insertCharacter(1));
 writeln(insertCharacter(123456789));
 readln;

end.

Saludos..:)


edito:changos eficsia me gano XD

maxzama 20-07-2015 15:22:53

Gracias. BDWONG, ecfisa, Casimiro Notevi.

Codigo final:

Código Delphi [-]
function InsertPoint(Value: string; const Ch:Char; const PosChar: Integer): string;
begin
  Insert(',', Value, Length(Value)-PosChar-1);
  Result := Value;
end;

Código Delphi [-]
      Monto:=copy(Cad,56,15);
                    Monto:=StringReplace(Monto, ',', '',[rfReplaceAll, rfIgnoreCase]);
                    Monto:= IntToStr(StrToInt(Monto));
                    Monto:=InsertPoint(Monto,',', E);


La franja horaria es GMT +2. Ahora son las 09:15:36.

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