PDA

Ver la Versión Completa : Decimales.


Iron
21-03-2009, 21:19:27
Buenas noches,

Me llamo Iron y es mi primer mensaje, vengo de hacer algunas cositas en Visual Basic y hace unos dias me decidi a trabajar con Delphi 7 (por tanto, mi nivel es bajísimo).
Tengo varias preguntas, pero abriré un hilo para cada una de ellas. La que pongo aquí es en referencia al número de decimales que salen después de la coma. ¿Como convierto 12,3425234213 en 12,34?, se que en Visual uso el Format, pero aqui no lo consigo :mad:.
Gracias por adelantado y un saludo.

Delphius
21-03-2009, 22:34:26
Hola Iron,
Bienvenido a clubdelphi.
Como eres nuevo te informo de la guia de estilo (http://www.clubdelphi.com/foros/guiaestilo.php). Por favor tomate unos minutos para leerla.

Respecto a tu duda, si es a efectos de visualización puedes emplear la función Format(). Revisa la ayuda.

Si deseas guardar o conservar el valor redondeado en una variable tienes a disposición la función RoundTo(), que redondea a la cantidad de decimales que indiques. Y al igual que lo dicho en format, lee la ayuda al respecto.

Puedes encontrar ejemplos del uso de format() y tal vez de RounTo() entre los hilos que se han venido tratando, realiza una búsqueda (http://www.clubdelphi.com/foros/search.php).

Saludos,

Iron
22-03-2009, 21:05:46
Hola Delphius,
Gracias por contestar, lo intenté con format como en Visual pero me da error. Buscaré en el foro como usar la función RoundTo() que es la que mas me interesa.

Un saludo

Delphius
22-03-2009, 23:24:48
Hola Delphius,
Gracias por contestar, lo intenté con format como en Visual pero me da error.

Delphi no es Visual Basic. Por algo he dicho: leer la ayuda:

Returns a formatted string assembled from a format string and an array of arguments.

Unit

SysUtils

Category

string formatting routines

function Format(const Format: string; const Args: array of const): string;

Description

This function formats the series of arguments in the open array Args. Formatting is controlled by the format string Format; the results are returned in the function result as a string.

For information on the format strings, see Format Strings.

Lee sobre Format Strings.

Un ejemplo de uso:

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(format('%.2f',[132.457843]))
end;

Y si te da error es conveniente que nos comentes textualmente que error para saber como ayudarte. Me gustaría ver una muestra de cómo lo intentaste usar...

Saludos,

Iron
23-03-2009, 20:41:38
Delphius, era justo lo que quería!!. He tardado mas de media hora en hacerlo funcionar :o. Copie mal lo que pusiste (no ponia el paréntesis que está después del Showmessage) y en la ayuda Delphi, el ejemplo empieza con Format y tampoco le ponen paréntesis.
Al repasar el foro para poner que no me salia vi la diferencia con el tuyo.

Gracias!!

rgstuamigo
23-03-2009, 20:54:35
Yo utilizo la funcion RoundTo de la unidad Math para redondear los decimales por ejemplo:
RoundTo(3,56789,-2) me sale como resultado 3,57 ;el segundo parametro
indica la cantidad de decimales que se quiere que se muestre en este caso pongo 2
negativo por asi es como trabaja la function, desde luego trabaja tambien con el segundo parametro positivo, puedes buscar en la ayuda de delphi al respecto para una mejor comprension.
Saludos......:cool:

Iron
24-03-2009, 18:34:17
También me vale, me interesa que me digais todas estas cosas porque así voy aprendiendo, Gracias!!!

Iron
28-03-2009, 13:01:46
He estado haciendo pruebas con RoundTo y hago algo mal:
El número es 123,456789
-si le pongo g:=RoundTo(f,-3):sale=123,45700073:confused:
-si le pongo -2):sale=123,45999964:confused:
-si le pongo -1):sale=123,5:)
-si le pongo 0):sale=123:)

También me pasa con una función mia:

procedure TInt_CC.ListBox9Click(Sender: TObject);
var
convertir:smallint;
begin
convertir:=Listbox9.ItemIndex + 1;
Tipo_Inst_P_S:=Tipo_Inst(convertir);
end;

function Tipo_Inst(convertir:integer):single;
begin
if convertir=1 then Tipo_Inst:=1.732;
if convertir=2 then Tipo_Inst:=2;
if convertir=3 then Tipo_Inst:=1.732;
if convertir=4 then Tipo_Inst:=1.732;
end;

Con esta función me devuelve 1,7319999933 :confused: en lugar de 1,732.

Gracias

rgstuamigo
28-03-2009, 14:22:14
He estado haciendo pruebas con RoundTo y hago algo mal:
El número es 123,456789
-si le pongo g:=RoundTo(f,-3):sale=123,45700073:confused:
-si le pongo -2):sale=123,45999964:confused:
-si le pongo -1):sale=123,5:)
-si le pongo 0):sale=123:)
Pues yo lo he probado tambien y me sale todo bien por ejemplo:
RoundTo(123,456789,-3)=123,457 ok
RoundTo(123,456789,-2)=123,46 ok
RoundTo(123,456789,-1)=123,5 ok
RoundTo(123,456789,0)=123 ok
Probado en Delphi 7.;)
Me late que quisas estas haciendo algo mal.:confused:
Por que no pones tu codigo para que lo podamos ver.;)

Iron
28-03-2009, 23:17:08
Mi código es este (también en Delphi 7):

procedure TForm1.Button1Click(Sender: TObject);
var
f:single;
g:single;
begin
f:=123.456789;
g:=RoundTo(f,-2);
showmessage (floattostr(g));
end;

Estoy convencido que es fallo mio, pero no se donde.
Un saludo y gracias.

jandok238
28-03-2009, 23:31:08
Mi código es este (también en Delphi 7)
[delphi] procedure TForm1.Button1Click(Sender: TObject);
var
f:single;
g:single;
begin
f:=123.456789;
g:=RoundTo(f,-2);
showmessage (floattostr(g));
end;


Estoy convencido que es fallo mio, pero no se donde.
Un saludo y gracias.

El detalle esta en el tipo de las variables...
declara las variables de tipo doble ... :D:D


var f,g : double;



salu2!!!!!!!

Iron
29-03-2009, 19:29:34
Correcto, eso era el fallo!!!, yo cuando me puse a definir las variables vi primero el rango de las mismas:
Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8

Pensaba que con single me valía!!!

Gracias