Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Kropkę na przecinek w obliczeniach,, oraz max 3 liczby po przecinku
marian2299
post
Post #1





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

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


Co muszę zrobić, żeby w obliczeniach np takim :
  1. <?php
  2.  
  3. $dzialanie = 100/15;
  4. $wynik = $dzialanie/4;
  5.  
  6. echo "$wynik";
  7.  
  8. ?>


Wynik był 1,66... zamiast : 1.66666666667 ?

Z góry dzięki.

Ten post edytował marian2299 3.07.2009, 18:58:51
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
slawo123
post
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 1
Dołączył: 21.08.2008

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


http://pl.php.net/number_format

echo number_format($wynik, 2, ',', ' ')
Go to the top of the page
+Quote Post
marian2299
post
Post #3





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

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


Nie oto mi chodziło.
Teraz pokazuje "1,67" a miało być "1,66...".
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




round" title="Zobacz w manualu PHP" target="_manual (IMG:http://forum.php.pl/style_emoticons/default/dry.gif)

Nie było w podobnych?
Go to the top of the page
+Quote Post
marian2299
post
Post #5





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

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


Jakich "podobnych" ? Poza tym, ja NIE chce zaokrąglać!!
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




printf" title="Zobacz w manualu PHP" target="_manual...
Go to the top of the page
+Quote Post
Suh
post
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

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


  1. <?php
  2. str_replace('.', ',', substr($wynik, 0, 4));
  3. ?>


np. coś takiego, z tym, że argument o wartości 4 w substr to ilość znaków przy założeniu że przed przecinkiem jest tylko jedna cyfra..
modyfikację zostawiam Tobie.. może się przydać funkcja strpos" title="Zobacz w manualu PHP" target="_manual

Ten post edytował Suh 3.07.2009, 22:06:53
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A jak będzie miał liczbę z większą liczbą całości, wtedy Twój kod będzie bezużyteczny.

printf" title="Zobacz w manualu PHP" target="_manual/sprintf" title="Zobacz w manualu PHP" target="_manual z odpowiednim wzorcem, ew. potem kropkę zamienić.
Go to the top of the page
+Quote Post
Suh
post
Post #9





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

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


Wiem, wspomniałem o tym i dlatego też podałem funkcję strpos na końcu.
Poza tym powiedzmy wywołanie sprintf("%.2f", $wynik) zaokrągli wynik do 2 miejsca po przecinku, a nie obetnie. Sam o takim rozwiązaniu pomyślałem i początkowo tak napisałem ale po sprawdzeniu musiałem edytować post.
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zawsze zostaje money_format" title="Zobacz w manualu PHP" target="_manual, ale pod windows nie działa. I nie jestem pewien, czy też nie zaokrągla.

Ew. explode" title="Zobacz w manualu PHP" target="_manual po kropce, obcięcie do dwóch drugiego elementu i potem sklejenie przecinkiem.
Go to the top of the page
+Quote Post
marian2299
post
Post #11





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

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


Dziękuje (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Spytam jeszcze tutaj:
Jak zrobić coś w stylu "jeśli liczba jest 2 cyfrowa to.." ?

  1. <?php
  2.  
  3. $dzialanie = 100/15;
  4. $wynik = $dzialanie/4;
  5. $znaki = strlen($wynig);
  6. ?>
  7.  
  8. <?php
  9. if ($znaki == 3)
  10. {
  11. $wynig = str_replace('.', ',', substr($wynik, 0, 4));
  12. echo $wynig;
  13. }
  14. else if($znaki == 4)
  15. {
  16. $wynig = str_replace('.', ',', substr($wynik, 0, 5));
  17. echo $wynig;
  18. } else {}
  19. ?>

Jak tam :
$wynig = str_replace('.', ',', substr($wynik, 0, 5));
odwołać się do globalnej ? pisałem :
$wynig = str_replace('.', ',', substr(global $wynik, 0, 5));
ale nie działało.

Ten post edytował marian2299 4.07.2009, 00:24:22
Go to the top of the page
+Quote Post
Suh
post
Post #12





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

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


Nie działało, ponieważ jeżeli takiego kodu użyłeś jak na powyższym listingu to jest w nim dość istotny błąd.

Zmienna $znaki dostaje wartość 0, bo zmienna $wynig nie jest jeszcze zainicjalizowana. Dlatego też w poniższych warunkach wchodzisz do else {} gdzie nie ma nic..

Wcześniej podałem aby użyć funkcji strpos, która uelastyczniła by cały ten skrypt. Np. w ten sposób :

  1. <?php
  2. $dzialanie = 100/15;
  3. $wynik = $dzialanie/4;
  4.  
  5. $po_przecinku = 2; // ilosc cyfr po przecinku
  6.  
  7. if(strpos($wynik, '.') === true)    // sprawdzenie czy w wyniku jest kropka
  8.    $znaki = strpos($wynik, '.') + 1 + $po_przecinku;    // w wyrazeniu jest +1 poniewaz pozycja jest podawana od 0, a nie od 1
  9. else         // jezeli nie ma kropki to jest przepisywane cale wyrazenie
  10.    $znaki = strlen($wynik);
  11.    
  12. $wynig = str_replace('.', ',', substr($wynik, 0, $znaki));
  13. echo $wynig;
  14. ?>


Ten post edytował Suh 4.07.2009, 08:30:53
Go to the top of the page
+Quote Post
marian2299
post
Post #13





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

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


Hah, ale czemu i tak pokazuje mi :
1,66666666667 ?
Go to the top of the page
+Quote Post
Suh
post
Post #14





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

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


Przyznam szczerze. Nie testowałem tego skryptu tylko pisałem z głowy w oparciu o manual.

Poniżej masz wersje działającą.

  1. <?php
  2. $dzialanie = 100;
  3. $wynik = $dzialanie/4;
  4.  
  5. $po_przecinku = 2;
  6. $pozycja = strpos($wynik, '.');
  7.  
  8. if ($pozycja !== false)
  9.    $znaki = $pozycja + 1 + $po_przecinku;
  10. else
  11.    $znaki = strlen($wynik);
  12.  
  13.  
  14. $wynig = str_replace('.', ',', substr($wynik, 0, $znaki));
  15. echo $wynig;
  16. ?>


To juz testowałem i powinno działać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
marian2299
post
Post #15





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

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


No nie mogę, pokazało mi się "25" (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) .
Go to the top of the page
+Quote Post
Pr0100
post
Post #16





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

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


  1. <?php
  2. $dzialanie = 100/15;
  3. $wynik = $dzialanie/4;
  4.  
  5. echo number_format($wynik, strlen($wynik), ',', '');
  6.  
  7. ?>


wynik: 1,6666666666667

Ten post edytował Pr0100 4.07.2009, 13:12:09
Go to the top of the page
+Quote Post
marian2299
post
Post #17





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

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


No i co z tego, Pr0100?
Go to the top of the page
+Quote Post
Pr0100
post
Post #18





Grupa: Zarejestrowani
Postów: 114
Pomógł: 24
Dołączył: 18.01.2008
Skąd: Warszawa

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


teraz?
Go to the top of the page
+Quote Post
Suh
post
Post #19





Grupa: Zarejestrowani
Postów: 112
Pomógł: 27
Dołączył: 24.08.2007
Skąd: Tarnów

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


marian przyjrzyj się UWAŻNIE początkowi tego co napisałem i będziesz wiedział czemu jest 25. Nie ma dzielenia przez 15..
Go to the top of the page
+Quote Post
marian2299
post
Post #20





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

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


Mógłbyś przeczytać temat ;].
Ma się pokazywać "1,66"
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 23:22