Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] jak zaokraglic ulamek w gore
Forum PHP.pl > Forum > Przedszkole
Agape
Mam funkcje do tworzenia miniaturek, która oblicza ratio o jakie trzeba zmniejszyć wysokość i szerokosć, ale potrzebuje przerobić skrypt. Problem w tym, że nie wiem jak rozumieć to równanie:
  1. if($image_x > $image_y){
  2. $ratio = ($image_x > $max_x) ? $max_x/$image_x : 1;
  3. }

Co oznacza znak zapytania i dwukropek ? Jak rozumieć to równanie?

To równanie chyba jest rozwiązaniem mojego problemu jak zaokrąglić ułamek w górę. Ceil działa nie tak jak bym chciał, zaokrągla do liczby całkowitej a round nie zawszę zaokrągla w górę, np przy 1.2 da 1 a ja potrzebuje żeby dało 2.

Wątpie, żeby nie dało się tego zrobić.
zzeus
  1. $ratio = ($image_x > $max_x) ? $max_x/$image_x : 1;

to skrócona wersja zapisu
  1. if($image_x > $max_x)
  2. $ratio = $max_x/$image_x
  3. else
  4. $ratio = 1;


Do zaokrąglania ułamków w górę służy ceil(), więc co znaczy że nie działa tak jak byś chciał ?
phpion
Cytat(Agape @ 21.12.2009, 14:18:57 ) *
Ceil działa nie tak jak bym chciał, zaokrągla do liczby całkowitej a round nie zawszę zaokrągla w górę, np przy 1.2 da 1 a ja potrzebuje żeby dało 2.

No ale przecież właśnie ceil() z 1.2 zrobi 2.
Agape
Sory, zły przykład. Chodziło mi o np jak wychodzi 1.333 dało mi 1.34 w zaokragleniu albo 1.4. Żadna z tych 2 funkcji tego nie potrafi z tego co czytałem. Ceil zaokrągla do całości a round w tym przypadku zaokrągli w dół.

Mam jeszcze jeden problem, z użyciem imagecolorallocate. Ustalam kolor biały jednak nadal jest czarny. WHY ? Muszę użyć jeszcze jakiejś funkcji ? W manualu nie jest to bezpośrednio napisane a nie chcę dodawać ani tekstu ani transparentnego tła.

  1. $nowy_obrazek = imagecreatetruecolor($szerokosc_tla, $wysokosc_tla);
  2. $background_color = imagecolorallocate($nowy_obrazek, 255, 255, 255);
  3.  
  4. $current_image = imagecreatefromjpeg($source);
  5.  
  6. ImageCopy($nowy_obrazek, $current_image, $tlo_x, $tlo_y, 0, 0, $nowa_szerokosc, $nowa_wysokosc);
  7. if(exif_imagetype($source) == IMAGETYPE_JPEG){
  8. imagejpeg($nowy_obrazek, $folder.'t_'.$plik);
  9. }
Rysh
Zobacz jeszcze funkcję floor();
thek
Zaokrąglanie do określonej liczby po przecinku... Zerknij do komentarzy dla ceil smile.gif
nospor
Cytat
Zobacz jeszcze funkcję floor();
Nie ma to jak przeczytac post wyzej i bezczelnie nabic sobie posta...

Cytat
a round w tym przypadku zaokrągli w dół.
zajrzal bys do manuala a nie wygadywal glupoty...
http://pl.php.net/manual/en/function.round.php
celbarowicz
  1. <?php
  2. function liczba($liczba)
  3. {
  4. //tylko dla liczb nieujemnych
  5.  
  6. $calkowita_czecs=floor( $liczba); //odcinamy czść ułamkową
  7.  
  8. if($liczba>$calkowita_czecs){$calkowita_czecs=$calkowita_czecs+1;}
  9. return $calkowita_czecs ;
  10.  
  11. }
  12. //przykłady
  13. echo liczba(3.932); echo '<br>';
  14. echo liczba(41.8832); echo '<br>';
  15. echo liczba(2841.78832); echo '<br>';
  16. //użyj tej funkcji, jeśli chodzi o jeden piksel w dół czy w górę to czy warto się nim zajmować?
  17. ?>
  18.  
  19. jeśli z liczby np:24.35276 chcesz otrzymać 100 razy większą bez reszty to pomnóż ją przez 100 i użyj w/w funkcji
  20.  
  21.  


Agape
Cytat(nospor @ 22.12.2009, 10:12:55 ) *
zajrzal bys do manuala a nie wygadywal glupoty...
http://pl.php.net/manual/en/function.round.php


Hm, sory za zamieszanie, ale ustawiłem sobie wyszukiwarkę manuala, pod złym adresem chyba. Okazało się, że w polskiej wersji manuala dla round którą znalazło mi, nie ma wszystkiego opisanego (parametru mode dokładnie) w angielskiej którą podałeś już to jest. Nie spodziewałem się, że mogą być takie różnice. Dzięki wam za pomoc.
celbarowicz
  1.  
  2. [color="#000088"]$ratio[/color] = [color="#009900"][color="#000088"]$ratio[/color] [color="#339933"]=[/color] ([color="#000088"]$image_x[/color] [color="#339933"]>[/color] [color="#000088"]$max_x[/color]) ? [color="#000088"]$max_x[/color][color="#339933"]/[/color][color="#000088"]$image_x[/color] [color="#339933"]:[/color] [color="#cc66cc"]1[/color][/color][color="#339933"];
  3. [/color][color="#000088"]// ($image_x > $max_x) ? $max_x/$image_x : 1;
  4. jest to operator trójskładnikowy
  5. jeżeli wyrażenie między = a i ? jest prawdziwe to $ratio= wartość $max_x/$image_x czyli znajduje się między ? i :
  6. w przeciwnym razie $ratio=1 czyli wartość między ? i 1;
  7. jest to inna postać if.
  8.  
[/color]



wkleiły mi się jakieś zbędne rzeczy
ma być ? i : w pprzedostatnie linijce
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.