PDA

Ver la Versión Completa : Insertar un Carácter, antes de los 2 últimos carácter


maxzama
14-07-2015, 20:47:35
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).

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:

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;


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
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 (http://www.delphibasics.co.uk/RTL.asp?Name=Insert&ExpandCode1=Yes)


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

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

1234.5
123.45
12.345
1.2345


O simplemente:

var
Monto: string;
begin
Monto := '12345';
Insert('.', Monto, 4); // 123.45


Saludos :)

BDWONG
15-07-2015, 01:07:16
Espero esto sea lo que buscas

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:

function InsertPoint(Value: string; const Ch:Char; const PosChar: Integer): string;
begin
Insert(',', Value, Length(Value)-PosChar-1);
Result := Value;
end;

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