2012-05-10 22 views
16

iam szukający sposobu na zaokrąglenie w górę iw dół do najbliższej 5, a następnie znajdź wielki wspólny mianownik dwóch liczb. Potrzebuję go do podpisu Y-skale na wykresie.JavaScript: Zaokrąglij w górę i w dół do najbliższych 5, a następnie znajdź wspólny mianownik

To jest mój kod do tej pory:

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; 
} 

Celem jest coś takiego: wartości maksymalnej (okrągłe do najbliższej 5)

1379.8 -> 1500 

I na odwrót - minimalna wartość (zaokrąglenie w dół do najbliższej 5)

41.8 -> 0 

Potem chcę znaleźć wspólny de licznik jak 250 lub 500

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

czyli

0 -> 500 -> 1000 -> 1500 

jest Ther sposób do zrobić coś takiego? Dzięki dużo

+1

1379.8 zaokrąglone w górę do najbliższych 5 będzie 1380. Masz na myśli "do najbliższych 500"? – devnull69

+2

Co dokładnie masz na myśli przez rundę do najbliższych 5? W pierwszym i drugim przykładzie, faktycznie zaokrąglasz do najbliższych 500. Lub do najbliższych 250, w zależności od tego, jak na to patrzysz. – Blazemonger

Odpowiedz

46

Jeśli chcesz zaokrąglić x z dokładnością do 500, można podzielić ją przez 500, zaokrąglić do najbliższej liczby całkowitej, a następnie pomnożyć przez 500 znowu:

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

Aby zaokrąglić go do najbliższego y wymienić 500 z y:

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

Brzmi świetnie, ale problem polega na tym, że wartości mogą być ogromne lub bardzo małe. Dla przykładu 1500 i 0,23. – Fargho

+2

Następnie musisz dokładniej określić, w jaki sposób chcesz zaokrąglić liczbę. Obecnie twoje pytanie nie mówi tego, co najwyraźniej masz na myśli. – Blazemonger

+0

Bardzo ładna odpowiedź. Jeśli chciałem do około 0,05 lub 0,1, po prostu muszę zrobić 0.05 * Math.round (x/0.05) –

4

Mam nadzieję, że moje matematyki jest poprawna, ale tutaj są różne sposoby „zaokrąglenia”

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

Korzystanie this api można zaokrąglić dowolną liczbę do najbliższej wielokrotności dowolnej liczbie, w górę lub w dół, z tym poleceniem:

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

Na przykład, jeśli chciałem zaokrąglić 536 do najbliższych 500, użyłbyś:

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

+0

Ups, właśnie zdałem sobie sprawę, że pytanie zadano 5 lat temu. Czy administrator może je zamknąć? Wygląda na to, że nie ma żadnej aktywności ... –

Powiązane problemy