Gå til innhold

Avrunding av tall (til nærmeste 2,5)


Anbefalte innlegg

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 :love:

Endret av TheClown
Lenke til kommentar
Videoannonse
Annonse

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 av Ernie
Lenke til kommentar
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 av OISNOT
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...