4 votos

Cómo averiguar si un número es cien o mil?

La pregunta puede elevar las cejas, pero he estado buscando en google y no conozco la palabra clave para la búsqueda. Yo no sé el término matemático.

Lo que estoy tratando de hacer es que se desea redondear un número a la izquierda de la mayoría de cifra significativa.

Por ejemplo,

Si tengo $1111$ quiero la vuelta a $1000$ Si tengo $423$ quiero la vuelta a $400$.

Se me ocurrió una manera de hacer esto. Si alguien puede confirmar si estoy cerca de ser correcto, le estaría muy agradecido.

para $423$ me haría Math.floor(423/100) * 100 , pero para hacer eso tendría que saber para cada número lo que a dividir y multiplicar.

Lo que no quiero hacer es un montón de if-else bloques como este.

if number is > 10 and number is < 99 then:
  divide by 100
else if number is > 99 and number is < 999 then:
  divide by 1000
// so on

5voto

user53739 Puntos 26

Decir $n$ es su número, a continuación,

  • el mayor pedido de la potencia de $10$ menor que $n$ es $\lfloor\log_{10} n\rfloor$ (es decir, el mayor entero $d$ s.t. $10^d\leq n$
  • el mayor poder de la $10$ menor que $n$ es, por tanto, $10^{\lfloor\log_{10} n\rfloor}$
  • el dígito más significativo es $\left\lfloor\frac{n}{10^{\lfloor\log_{10} n\rfloor}}\right\rfloor$

Por lo tanto, lo que usted busca puede ser calculada como $$ \left\lfloor\frac{n}{10^{\lfloor\log_{10} n\rfloor}}\right\rfloor \cdot 10^{\lfloor\ln_{10} n\rfloor} $$ Me gustaría, a continuación, inserte un if declaración de antemano para descartar el caso de $n=0$. Un pseudocódigo sería como (yo lo extendí para los números negativos en el valor absoluto abs y el signo sign funciones)

si n == 0, , a continuación,
$~~~~$regresar 0
end if
d = floor(log(abs(n)) / log(10)) $\color{green}{\%~~\text{NB: }{\tt d}\text{ is to be converted to integer type}}$
regresar sign(n) * floor(abs(n)/10^d) * 10^d

Aviso de que esto funciona también para los números decimales menores que $1$: por ejemplo, para $n=0.024$ volvería $0.02$. Si este no es el quería comportamiento, editar el primer if declaración en consecuencia.

1voto

mblsha Puntos 305

Usted puede convertir el número a una cadena y tomar su longitud para saber qué potencia de 10 a utilizar para el redondeo de una idea.

Alternativamente, podrías probar a poner el número en notación científica y ronda el valor de esa manera por la otra opción, si estás bien con números de punto flotante que se utiliza.

De Base 10 de los Logaritmos también sería otra idea que puede funcionar como se señaló en los comentarios.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X