Skie
26.08.2008, 21:19:50
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
26.08.2008, 21:35:59
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ć.
<?php
$w = 14200000;
$r = $w * 0.5;
// rezultat to float;
$r = $w / 2;
// rezultat to int;
// rezultat to 7.1E+6
?>
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):
<?php
$r = (int)($w * 0.5);
// rezultat to nie float 7100000;
?>
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
baszkir
26.08.2008, 21:37:46
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