Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Liczby
Forum PHP.pl > Forum > Przedszkole
Skie
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?
barthpl
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
baszkir
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
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.