Avatar billede exp5 Nybegynder
30. december 2003 - 18:27 Der er 19 kommentarer og
3 løsninger

Runde op

Hej

Er der nogen der kender en runde op funktion i php?

Altså

187 rundes op til 200
1500000 runder op til 2000000
5 rundes op til 10
1768 rundes op til 2000

osv osv

Den må bare - ikke - runde ned!

//
Avatar billede arne_v Ekspert
30. december 2003 - 18:35 #1
Formelen må være:

scale = pow(10, intfloor(log10(x)))

y = intceil(x/scale) * scale

nu skal du bare have en til at oversætte det til PHP !
Avatar billede fcknet Nybegynder
30. december 2003 - 18:35 #2
ceil($tal)
Avatar billede fcknet Nybegynder
30. december 2003 - 18:36 #3
Avatar billede arne_v Ekspert
30. december 2003 - 18:38 #4
fcknet>

Jeg er ret sikker på at ceil(187) returnerer 187 ikke 200 !
Avatar billede exp5 Nybegynder
30. december 2003 - 18:56 #5
arne_v ->> Tak, vil du ikke prøve at lave et eksempel, hvor tallet er 187 ?
Avatar billede exp5 Nybegynder
30. december 2003 - 18:56 #6
fcknet -> ceil udskriver bare det samme tal.. :-(
Avatar billede arne_v Ekspert
30. december 2003 - 18:59 #7
Desværre programmerer jeg ikke i PHP.

jeg er overbevist om at min formel er rigtig.

log10(187) er 2.27
intfloor(22.27) er 2
pow(10,2) er 100
187/100 er 1.87
intceil(1.87) er 2
2*100 er 200
Avatar billede ahv Nybegynder
30. december 2003 - 18:59 #8
En oversættelse til php (if-sætningen er på da den ellers ikke virker med tal under 10.)

<?php
$x = 10;
if($x < 10) {
    $scale = pow(10, floor(log10($x))) * 10;
} else {
    $scale = pow(10, floor(log10($x)));
}
$y = ceil($x/$scale) * $scale;
echo $y;
?>
Avatar billede fangel Nybegynder
30. december 2003 - 18:59 #9
arne -> må være

$tal = 187;
$scale = pow(10, floor(log($tal, 10)));
$rundet = ceil($tal/$scale) * $scale;
echo $rundet;

tror jeg...

Morten
Avatar billede exp5 Nybegynder
30. december 2003 - 19:00 #10
ok jeg prøver mig frem ;)
Avatar billede ahv Nybegynder
30. december 2003 - 19:02 #11
Morten -> det skal være log10 og ikke log
Avatar billede arne_v Ekspert
30. december 2003 - 19:02 #12
ahv>

Hvorfor skulle det ikke virke for <10 ?
Avatar billede exp5 Nybegynder
30. december 2003 - 19:05 #13
Tak Arne, løsningen blev sådan:

<?php
$x = 187;
$scale = pow(10, floor(log10($x)));

$y = ceil($x/$scale) * $scale;

echo $y;
?>

og tak til jer andre, jeg prøver lige ahv's script, og hvis det virker deler jeg mellem arne v og ahv. Er det okay ?
Avatar billede fangel Nybegynder
30. december 2003 - 19:08 #14
ahv -> havde ikke se funktionen log10(), derfor jeg benyttede log($tal, 10) (tjek php.net/log, det andet parameter er base for logaritmen... tilføjet i 4.3.0)

Morten
Avatar billede ahv Nybegynder
30. december 2003 - 19:11 #15
Arne_v eks ->

log10(5) er 0.698970004336
intfloor(0.698970004336) er 0
pow(10,0) er 1
5/1 er 5
intceil(5) er 5
5 * 1 er 5
Avatar billede exp5 Nybegynder
30. december 2003 - 19:11 #16
okay, alle virker faktisk, så smid et svar, dea_pg, og arne_v.
Avatar billede ahv Nybegynder
30. december 2003 - 19:13 #17
exp5 -> Dog virker virker de andres ikke for <10
Avatar billede fangel Nybegynder
30. december 2003 - 19:15 #18
svaa'r

Morten
Avatar billede exp5 Nybegynder
30. december 2003 - 19:16 #19
ok, vi mangler stadig arne_v's svar ;)
Avatar billede arne_v Ekspert
30. december 2003 - 19:16 #20
Aha.

Jeg antog at 5 skulle blive til 5.

Fordi 5 oprundet til et ciffer er 5.

Men du har ret at der står at 5 skal oprunde til 10.
Avatar billede arne_v Ekspert
30. december 2003 - 19:16 #21
svar
Avatar billede exp5 Nybegynder
30. december 2003 - 19:20 #22
Tak for svarene!

Håber det er en fair point fordeling
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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