Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Liczby
Skie
post
Post #1





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


Witam,
Napotkałem dziwną rzecz w PHP ostatnio:

Liczba 14,200,000 (14.2 miliona) mnożona przez 0.5 dawała w wyniku 7.1E + 6

Liczba 14,200,000 (14.2 miliona) dzielona przez 2 dawała w wyniku 7,100,000

Czy może mi ktoś powiedzieć skąd wynika ta "dziwna" forma liczby w pierwszym przypadku? I Czy da się pierwszy przypadek z mnożeniem tak przerobić by na końcu wychodziła liczba 7,100,000?

Ten post edytował Skie 26.08.2008, 21:20:26


--------------------
Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+
Strona Domowa | Elradia MMORPG
FireFox: make the web better.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
barthpl
post
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

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


Wszystko ukrywa się w formacie. Jak mnożysz przez 0.5 to zmieniasz int'a na float a jego wyświetlanie w pewnym zakresie jest inne. Przykład poniżej powinien to zobrazować.
  1. <?php
  2. $w = 14200000;
  3.  
  4. $r = $w * 0.5;
  5. echo is_float( $r ) ? 'float' : 'nie float';
  6. // rezultat to float;
  7.  
  8. $r = $w / 2;
  9. echo is_int( $r ) ? 'int' : 'nie int';
  10. // rezultat to int;
  11.  
  12. echo (float)(7100000);
  13. // rezultat to 7.1E+6
  14. ?>


Co do tego jak wrócić do normalnego zapisu to na przykład tak (przy założeniu że w mnożeniu nie wyjdą ci połówki):
  1. <?php
  2. $r = (int)($w * 0.5);
  3. echo is_float( $r ) ? 'float' : 'nie float';
  4. echo $r
  5. // rezultat to nie float 7100000;
  6. ?>

lub przy użyciu funkcji number_format " title="Zobacz w manualu PHP" target="_manual lub innych podobnych. Proponuję też poczytać sobie o rodzajach zmiennych liczbowych, czasami się przydaje winksmiley.jpg


--------------------
Jeżeli pomogłem rozwiązać Twój problem, kliknij pomógł.
Go to the top of the page
+Quote Post
baszkir
post
Post #3





Grupa: Zarejestrowani
Postów: 22
Pomógł: 8
Dołączył: 2.08.2008

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


N amoj gust bedzie tak :

W pierwszym przypadku wynik masz podany jako liczbe zmiennoprzecinkowa w notacji naukowej (bo masz liczbe calkowita razy liczbe zmiennoprzecinkowa, a wiec wynik tez jako zmiennoprzecinkowa).

Drugi przypadek - dwie liczby calkowite a wiec wynik tez jako liczba calkowita.

Jak zmienić:
1) echo (int)(14200000*0.5) - sposob raczej nieelegancki mowiac lagodnie
2) manual - sprintf
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 Aktualny czas: 20.08.2025 - 19:04