Avatar billede thingholm.dk Nybegynder
12. august 2002 - 09:57 Der er 6 kommentarer og
1 løsning

y-akse i graf

Hej

Jeg er ved at lave en normalt søjle diagram. Jeg har dog nogle udfordring med at beregne y-aksens maksimum og minimum.

Hvis det skulle være helt rigtigt skal den runde op til det nærmeste tal - dvs. at hvis mine y-værdier er 1, 2, 5, 8 - skulle y-aksen være inddelt med 0, 5, 10.

Det samme hvis y-værdierne er 10, 20, 30 - så skal grafen indeles som 0, 25, 50.

Jeg håber at nogen kan hjælpe.

VH

Anders Thingholm
Avatar billede alexander_j Nybegynder
12. august 2002 - 15:32 #1
Hvis du vil afrunde til hele 5'ere, så prøv følgende:
(Math.Round(x/5))*5

Hvis du vil afrunde til hele 10'ere, så prøv følgende:
(Math.Round(x/10))*10

x er naturligvis tallet som du vil afrunde!

Har ikke prøvet det efter, da jeg sidder på arbejdet, men kigge på det når jeg kommer hjem :-)

/Alexander
Avatar billede barklund Nybegynder
12. august 2002 - 17:21 #2
Du må forklare lidt... Hvad skal maksimum være? Nærmeste 10 over højeste tal? Eller er det afhængigt at størrelses-ordnen på højeste tal? Hvorfor skal listen [10,20,30] have "50" som maksimum og ikke bare "30"?

Er det noget med, at have et array af muligst maksima (hedder det det?):

maxs = [5,10,50,100,500,1000,5000,10000];

Så findes det mindste tal i array'et, som det højeste tal er større end og aksens maksimum er da index+1... øh, altså:

numbers = [5,14,56];
maxs = [5,10,50,100,500,1000,5000,10000];

var i, max_num = numbers[0];
for (i = 1; i < numbers.length; i++)
    max_num = Math.max(max_num,numbers[i]);
for (y_max = 0; maxs[y_max] < my_max; y_max++);

Så vil du til sidst have en "y_max", der er det mindste tal i maxs-arrayet større end det højeste tal i numbers-arrayet... kan det bruges?
Avatar billede alexander_j Nybegynder
12. august 2002 - 18:16 #3
Tror du er alt for avanceret her Barklund ;-) - men vi får at se :-)

/Alexander
Avatar billede thingholm.dk Nybegynder
12. august 2002 - 23:34 #4
Hej

Jeg tror at barklund har fat i det rigtige, men kan det ikke lade sig gøre uden at have en array med 'maksima'? Dvs. at beregne det næste 'runde' tal...
Avatar billede barklund Nybegynder
13. august 2002 - 09:22 #5
Tjo... Hvis næste "runde" tal er som jeg har skrevet, så har jeg lige digtet:

Math.nextRound = function(num) {
    var f = 5*Math.ceil(num/(5*Math.pow(10,num.toString().length-1)));
    var z = Math.pow(10,num.toString().length);
    return int (String(f)+String(z).substr(2));
}
trace(Math.nextRound(29));
trace(Math.nextRound(499));
trace(Math.nextRound(501));

/Barklund
Avatar billede thingholm.dk Nybegynder
14. august 2002 - 13:19 #6
Hej

Tak for svaret. Tror du at du kort kan forklare hvad det er din funktion gør?

VH

Anders
Avatar billede barklund Nybegynder
17. august 2002 - 21:31 #7
Min funktion? Den er da ganske enkel... :o)

Okay, jeg splitter den op:

Math.nextRound = function(num) {

    var numToString = num.toString();
    // streng af tallet

    var powerToNumLength = Math.pow(10,numToString.length-1);
    // Et 1-tal efterfulgt af et nul færre, end num har cifre

    var numAsDecimal = num/powerToNumLength;
    // vil indeholde num hvor "," står lige efter det første ciffer:
    // 45638 => 4,5638
    // 875 => 8,75

    var factor = 5;
    // faktor til at fortælle hvilke indeks mellem 1 og 10 der er interessante
    // her er det "5" og "10" der bliver udvalgt.

    var maxIndex = factor*Math.ceil(numAsDecimal/factor);
    // Finder det indeks mellem 1 og 10 som er større end numAsDecimal
    // og som factor går op i. Vil her give "5" eller "10"

    var zeroes = powerToNumLength.toString().substr(1);
    // en streng af nuller, med et nul færre end cifre i num

    var maxAsString = maxIndex.toString()+zeroes;
    // streng med funden maximum ("5" eller "10")
    // efterfulgt af alle nullerne

    return int(maxAsString);
    // returneres som int   
}

/Barklund
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester