Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Elevando una cifra (https://www.clubdelphi.com/foros/showthread.php?t=62213)

felipe88 11-12-2008 02:57:21

Elevando una cifra
 
Hola a todos, tengo una simple duda...

Digamos que tengo este número 35.459, ¿existe alguna fórmula en Delphi para que se convierta en 40.000?; o por ejemplo 27.684 a 30.000 :confused:

De antemano gracias :)

egostar 11-12-2008 03:11:35

Hola

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(inttostr(round(35.459*0.1)*10));
  ShowMessage(inttostr(round(27.684*0.1)*10));
end;

Salud OS

felipe88 11-12-2008 03:27:03

Gracias amigo... pero hay un pequeño problema, en este caso no podría multiplicar por 10 ya que el resultado sería 40 ó 30 para el segundo caso, habría que multiplicarlo por 1.000, pero digamos que tuviera 4.556 para convertirlo a 5.000 sería por 100...
Se que es un algoritmo fácil, pero estoy un tanto frio de mente hoy :o... y evito tener que evaluar si cada número es mayor de 10, 100, 1.000... etc :D

egostar 11-12-2008 03:28:07

Cita:

Empezado por felipe88 (Mensaje 330422)
Gracias amigo... pero hay un pequeño problema, en este caso no podría multiplicar por 10 ya que el resultado sería 40 ó 30 para el segundo caso, habría que multiplicarlo por 1.000, pero en el caso de que tuviera 4.556 para convertirlo a 5.000 sería por 100...
Se que es un algoritmo fácil, pero estoy un tanto frio de mente hoy :o... y evito tener que evaluar si cada número es mayor de 10, 100, 1.000... etc :D

A ver amigo, el punto es decimal o de millares :eek:

Salud OS

felipe88 11-12-2008 03:37:58

Cita:

Empezado por egostar (Mensaje 330423)
A ver amigo, el punto es decimal o de millares :eek:

Salud OS

:D:D... no te asustes, pero si es de miles :p

egostar 11-12-2008 03:41:01

Cita:

Empezado por felipe88 (Mensaje 330425)
:D:D... no te asustes, pero si es de miles :p

Ahh, pues entonces así

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(inttostr(round(35459*0.0001)*10000));
  ShowMessage(inttostr(round(27684*0.0001)*10000));
end;
:D

Salud OS

egostar 11-12-2008 03:47:28

Ahora

Si son numeros de 2,3,4,5 etc cifras pues algo asi

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  numero: integer;
begin
  Numero := 35459;
  case length(inttostr(numero)) of
     2: ShowMessage(inttostr(round(Numero*0.1)*10));
     3: ShowMessage(inttostr(round(Numero*0.01)*100));
     4: ShowMessage(inttostr(round(Numero*0.001)*1000));
     5: ShowMessage(inttostr(round(Numero*0.0001)*10000));
  end;
end;

:rolleyes: ;) :cool: :D

Salud OS

felipe88 11-12-2008 03:52:58

:D... bueno, este último es válido aunque se extiende demasiado :rolleyes:... pero gracias amigo, me sirve para este momento ;)

Saludos :D

felipe88 11-12-2008 04:14:49

¿Alguna otra idea?, quiero complicar un tanto la cosa :p...
Veámos, para el codigo que me da Eliseo, se mide la distancia de la cifra para determinar segun el case, si está entre 10, 100, 1000...etc

¿Ahora, matemáticamente como podría jugar con esto?. :confused:

Saludos :D

Delphius 11-12-2008 04:24:51

Y digo yo... ¿porqué no lo generalizamos?

Algo así:

Código Delphi [-]
function TForm1.Digits(Number: integer): integer;
begin
  result := Length(IntToStr(Number));
end;

function Tform1.RoundUpNumber(Number: integer): integer;
var dig: integer;
begin
  dig := Digits(Number) - 1;
  result := trunc((round(Number * Power(0.1,Dig)) * Power(10,dig)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(RoundUpNumber(35459)));
end;

;)

Saludos,

felipe88 11-12-2008 04:42:55

Me gusta la idea Delphius :)... aunque aún estoy pensando en una fórmula :rolleyes:

Saludos :D

Delphius 11-12-2008 04:50:28

Cita:

Empezado por felipe88 (Mensaje 330438)
Me gusta la idea Delphius :)... aunque aún estoy pensando en una fórmula :rolleyes:

Saludos :D

Jajaja... no me digas... a ver... déjame adivinar: Esto lo haces a modo venganza por lo del otro hilo.:D

Pues esta vez me agarraste cansado, intento hacer ping a mi cerebro pero recibo puro timeouts. En estos momentos está off.

Si encuentras la fórmula avísame:D

Saludos,

felipe88 11-12-2008 15:35:25

Cita:

Empezado por Delphius (Mensaje 330439)
Jajaja... no me digas... a ver... déjame adivinar: Esto lo haces a modo venganza por lo del otro hilo.:D

Pues esta vez me agarraste cansado, intento hacer ping a mi cerebro pero recibo puro timeouts. En estos momentos está off.

Si encuentras la fórmula avísame:D

Saludos,

:D:D... relax Delphius... estoy pensando :rolleyes:...

Saludos :D


La franja horaria es GMT +2. Ahora son las 05:03:13.

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