TheClown Skrevet 28. november 2008 Del Skrevet 28. november 2008 (endret) Hei og hå. Nå føler jeg meg dum her jeg sitter, men jeg sliter virkelig med avrunding av tall i PHP. Jeg skriver et script som skal regne ut hvor mye jeg skal kjøre i benk de forskjellige dagene (pyramide om du lurer), og siden det er snakk om benkpress må verdiene slutte på: 0,0 - 2,5 - 5,0 - 7,5 - 10,0 - 12,5 - 15 - 17,5 - 20,0 - 22,5 - 25,0 - 27,5 - 30,0 osv Jeg har prøvd flere scripts uten hell, blant annet dette: <?php function roundnum ($num, $nearest) { $ret = 0; $mod = $num % $nearest; if ($mod >= 0) $ret = ( $mod > ( $nearest / 2)) ? $num + ( $nearest - $mod) : $num - $mod; else $ret = ( $mod > (-$nearest / 2)) ? $num - $mod : $num + ( -$nearest - $mod); return $ret; } echo roundnum (1234, 15); // round to the nearest 15 echo roundnum (1234, 5); // round to the nearest 5 ?> $kilo1 = $kilo*0.6; -> 36 $value1 = roundnum($kilo1,2.5); -> 36 burde vært 35 Hva er det jeg gjør feil? All hjelp mottas med et stort Endret 29. november 2008 av TheClown Lenke til kommentar
Ernie Skrevet 29. november 2008 Del Skrevet 29. november 2008 (endret) Første problemet du har der er at modulus driver med heltallsdivisjon og vil ikke fungere med flyttall. Det andre er at modulus alltid gir null eller et positivt heltall, og else-grenen din vil derfor aldri inntreffe. Utestet, men tror dette skal fungere: <?php function roundnum($num, $nearest) { //Dividerer ned tallet med $nearest $num = $num / $nearest; // for så å runde det av til nærmeste heltall (underforsått nærmeste $nearest) $num = round($num); // og ganger det så opp for å få korrekt størrelse på tallet return $num*$nearest; } ?> Dette kan såklart skrives på en linje <?php function roundnum($num, $nearest) { return round($num / $nearest) * $nearest; } ?> Endret 29. november 2008 av Ernie Lenke til kommentar
OISNOT Skrevet 30. november 2008 Del Skrevet 30. november 2008 (endret) Hva er det jeg gjør feil? Bruk fmod. function roundnum ($num, $nearest) { $mod = fmod($num, $nearest); $num -= $mod; if ($mod > $nearest / 2) $num += $nearest; return $num; } Edit: Ernie sin løsning er bedre, men denne viser cirka kordan du skulle brukt fmod. Endret 30. november 2008 av OISNOT Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå