2012-05-10 24 views
16

iam buscando una forma de redondear Y hacia abajo hasta el más cercano 5 y luego encontrar un gran común denominador de los dos números. Lo necesito para el título de un y-skale en un gráfico.Javascript: redondee hacia arriba y hacia abajo al 5 más cercano, luego encuentre un denominador común

Este es mi código hasta ahora:

function toN5(x) { 
    var i = 1; 
    while(x >= 100) { 
     x/=10; 
     i*=10; 
    } 
    var remainder = x % 5; 
    var distance_to_5 = (5 - remainder) % 5; 
    return (x + distance_to_5) * i; 
} 

El objetivo es algo como esto: El valor máximo (redonda hasta el 5 más cercana)

1379.8 -> 1500 

Y a la inversa - valor mínimo (redondee hacia abajo al más cercano 5)

41.8 -> 0 

Entonces quiero encontrar un común de NOMINADOR como 250 o 500

0 -> 250 -> 500 -> 750 -> 1000 -> 1250 -> 1500

o:

0 -> 500 -> 1000 -> 1500 

Es allí una manera de hacer algo como eso? Muchas gracias

+1

1379.8 redondeado al 5 más cercano sería 1380. ¿Quiere decir "al 500 más cercano"? – devnull69

+2

¿Qué quiere decir con redondear al 5 más cercano? En sus primeros y segundos ejemplos, en realidad está redondeando a los 500 más cercanos o a los 250 más cercanos, dependiendo de cómo lo mire. – Blazemonger

Respuesta

46

Si quería redondear x al 500 más cercano, que podría dividirlo por 500, redondea al entero más próximo, a continuación, se multiplica por 500 de nuevo:

x_rounded = 500 * Math.round(x/500); 

Para redondear al más próximo y, reemplace 500 con y:

x_rounded = 250 * Math.round(x/250); 
+0

Suena genial, pero el problema es que los valores podrían ser enormes y muy pequeños. Para el ejemplo 1500 y 0.23. – Fargho

+2

Luego debe ser más específico para nosotros acerca de cómo desea redondear el número. Actualmente, su pregunta en realidad no dice lo que aparentemente quiere decir. – Blazemonger

+0

Muy buena respuesta. Si quisiera alrededor de 0.05 o 0.1, solo necesito hacer 0.05 * Math.round (x/0.05) –

4

Espero que mis matemáticas es correcta, pero aquí hay varias maneras de "redondeo"

function sigfig(n, sf) { 
    sf = sf - Math.floor(Math.log(n)/Math.LN10) - 1; 
    sf = Math.pow(10, sf); 
    n = Math.round(n * sf); 
    n = n/sf; 
    return n; 
} 

function precision(n, dp) { 
    dp = Math.pow(10, dp); 
    n = n * dp; 
    n = Math.round(n); 
    n = n/dp; 
    return n; 
} 

function nearest(n, v) { 
    n = n/v; 
    n = Math.round(n) * v; 
    return n; 
} 

demo

1

Usando this api, puede redondear un número al múltiplo más cercano de cualquier número, arriba o abajo, con este comando:

$scm.round(number to be rounded).toNearest(multiple to which you want to round);

Por ejemplo, si quería redondear 536 a la 500 más cercana, usaría:

$scm.round(536).toNearest(500);

+0

Vaya, me acabo de dar cuenta de que la pregunta fue hecha hace 5 años. ¿Puede un administrador cerrarlo? Parece que no hay actividad ... –

Cuestiones relacionadas