Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] jak zaokraglic ulamek w gore, mam rownanie w php ale nie wiem co oznacza
Agape
post 21.12.2009, 14:18:57
Post #1





Grupa: Zarejestrowani
Postów: 384
Pomógł: 13
Dołączył: 16.06.2006

Ostrzeżenie: (0%)
-----


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ć.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
zzeus
post 21.12.2009, 14:24:20
Post #2





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

Ostrzeżenie: (0%)
-----


  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ł ?

Ten post edytował zzeus 21.12.2009, 14:26:23


--------------------
Go to the top of the page
+Quote Post
phpion
post 21.12.2009, 14:41:41
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
Agape
post 21.12.2009, 16:07:35
Post #4





Grupa: Zarejestrowani
Postów: 384
Pomógł: 13
Dołączył: 16.06.2006

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował Agape 21.12.2009, 16:08:02


--------------------
Go to the top of the page
+Quote Post
Rysh
post 22.12.2009, 03:54:35
Post #5





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

Ostrzeżenie: (0%)
-----


Zobacz jeszcze funkcję floor();


--------------------
Go to the top of the page
+Quote Post
thek
post 22.12.2009, 09:09:16
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Zaokrąglanie do określonej liczby po przecinku... Zerknij do komentarzy dla ceil smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
nospor
post 22.12.2009, 09:12:55
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
celbarowicz
post 22.12.2009, 09:41:51
Post #8





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


  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.  


Go to the top of the page
+Quote Post
Agape
post 22.12.2009, 10:13:28
Post #9





Grupa: Zarejestrowani
Postów: 384
Pomógł: 13
Dołączył: 16.06.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
celbarowicz
post 22.12.2009, 12:26:12
Post #10





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 5.07.2025 - 19:11