Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Obtener la cantidad de cifras de un numero (https://www.clubdelphi.com/foros/showthread.php?t=48973)

aeff 09-10-2007 18:34:17

Obtener la cantidad de cifras de un numero
 
Hola, quisiera saber si existia algún método matematico para calcular la cantidad de cifras que tiene un número dado, sin tener que convertir este numero a string y con la funcion Length saber esto, asi se hacer muy facil en Delphi pero lo que quiero como habia dicho es un algoritmo/calculo matematico para saber cuantas cifras tiene un número,

muchas gracias de antemano,
saludos

aeff!!

duilioisola 09-10-2007 18:46:56

No es una función matemática, pero yo haría algo así :
Código:

n = 1
while n*10 > numero
  n = n + 1;

numero es el que quieres ver cuantos digitos tiene
n es la cantidad de digitos que tiene

Supongo que con los logaritmos en base 10 también se puede hacer algo, pero de mis clases de matemáticas ya no me acuerdo;

Mick 09-10-2007 18:58:24

Una forma sencilla de implementar seria:

Código Delphi [-]
function cifras(n:integer):integer;
begin
  Result:= 0;
  repeat
    n:= n div 10;
    Inc(Result);
  until n=0;
end;

Saludos

aeff 09-10-2007 19:53:33

bueno, muchas gracias por sus respuestas colegas, realmente no tenia ni idea de como hacer esto que ustedes me han enseñado a hacer matemáticamente,

muchas gracias, muchas garcias,

saludos,
aeff!!

Neftali [Germán.Estévez] 10-10-2007 11:21:31

Creo que debes aplicar el Logaritmo (en base 10) al número del que deseas saber las cifras.

Log(1)=>0
Log(9)=>0,95...
Log(10)=>1
Log(11)=>1,04...
Log(99)=>1,99...
Log(100)=>2
...
Log(999999)=>5,999....
Log(1000000)=>6
...

Código Delphi [-]
  // En Y tendrás el  numero de cifras de X
  y := Trunc(Log10(x)) + 1;

duilioisola 10-10-2007 15:38:38

Genial Neftali!!!

Este es un verdadero método METEMATICO de hacerlo.

Sabía que los logaritmos tenían algo que ver con esto.

aeff 10-10-2007 16:17:55

saludos, muchars gracias [Neftali], está super-bueno ese método, no pensé que con logaritmos se podía determinar la cantidad de cifras de un número, pero esto de logaritmos no lo entiendo muy bien, ¿alguien me puede dar una explicación de los logaritmos en base 10?

muchas gracias,

saludos
aeff!!

Neftali [Germán.Estévez] 10-10-2007 16:53:45

Cita:

Empezado por aeff (Mensaje 237452)
¿alguien me puede dar una explicación de los logaritmos en base 10?

Básicamente el logaritmo es el método inverso de la potencia. El logaritmo en base 10 es, por tanto, el inverso de la potencia (con 10).

10^1=10 (2 cifras)
10^2=10*10=100 (3 cifras)
10^3=10+10+10=1000 (4 cifras)
10^4=14*10*10*14=10000
...
10^23434=.....= Aunque no lo calcules puedes asegurar que tendrá 23435 cifras.

No es casualidad que cada potencia añada una nueva cifra, es que el sistema decimal está basado en "base 10", igual que el octal es en "base 8" o el binario en "base 2".

De la misma forma podrías obtener las cifras para determinado número en binario, sempre que aplicaras en ese caso el logaritmo en base 2.

No se si te he aclarado algo...:o

Casimiro Notevi 10-10-2007 17:10:33

Cita:

Empezado por Neftali (Mensaje 237466)
Básicamente el logaritmo es el método inverso de la potencia. El logaritmo en base 10 es, por tanto, el inverso de la potencia (con 10).

10^1=10 (2 cifras)
10^2=10*10=100 (3 cifras)
10^3=10+10+10=1000 (4 cifras)
10^4=14*10*10*14=10000
...
10^23434=.....= Aunque no lo calcules puedes asegurar que tendrá 23435 cifras.

No es casualidad que cada potencia añada una nueva cifra, es que el sistema decimal está basado en "base 10", igual que el octal es en "base 8" o el binario en "base 2".

De la misma forma podrías obtener las cifras para determinado número en binario, sempre que aplicaras en ese caso el logaritmo en base 2.

No se si te he aclarado algo...:o


Más claro... no se puede :)

seoane 10-10-2007 17:21:08

Que bonitos los logaritmos, hubo una época (que yo no viví :D ) en la que no había calculadoras, y se utilizaban sus propiedades para hacer cálculos complejos. Supongo que aeff, si tiene la edad que aparece en su perfil, no ha visto todavía lo bonitas y lo horribles que pueden ser las matemáticas. Yo era de los que disfrutaba con logaritmos, senos, cosenos, derivadas e integrales, las matemáticas resultaban fascinantes :) . Luego llegue a primero de carrera y me tope con Álgebra y Calculo, y ahí se me quitaron todas las ganas de seguir con las matemáticas :p :D (bueno, después de eso tuve tiempo para un poco de trigonometría esférica, lastima que ya no me acuerde de casi nada :( )

En resumen, que bonitas las matemáticas y que bonitos los logaritmos :D

aeff 10-10-2007 17:51:24

verdaderamente me han decho que las matemáticas se ponen hiper-feas y a la vez hiper-bonitas, pero aun así con esa "discrepancia de opiniones" me gustaría seguir estudiandola, entendí lo que me quizo decir [Neftali], pero lo que quize preguntar fue que como doy solución a los algoritmos en base 10, por ejemplo:

log 52 = ???
10

¿me hago entender?

muchas gracias colegas

saludos

aeff!!

seoane 10-10-2007 19:30:31

Cita:

Empezado por aeff (Mensaje 237480)
... pero lo que quize preguntar fue que como doy solución a los algoritmos en base 10

Tienes 2 opciones, sin la unidad math solo cuentas con la función ln, es decir el logaritmo en base e. Pero aplicando propiedades de los logaritmos:
Código Delphi [-]
function log(X: Extended): Extended;
begin
  Result:= ln(X)/ln(10);
end;

Sin embargo si añades la unidad math, ya puedes usar la función log10 para calcular el logaritmo base 10.

Casimiro Notevi 10-10-2007 20:08:33

Cita:

Empezado por seoane (Mensaje 237514)
Tienes 2 opciones, sin la unidad math solo cuentas con la función ln, es decir el logaritmo en base e. Pero aplicando propiedades de los logaritmos:
Código Delphi [-]function log(X: Extended): Extended;
begin Result:= ln(X)/ln(10); end;


Sin embargo si añades la unidad math, ya puedes usar la función log10 para calcular el logaritmo base 10.

:eek: seoane, eres como el sombrero de un mago, sacas trucos sin parar :D


La franja horaria es GMT +2. Ahora son las 16:51:15.

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