Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Wyświetlanie liczb
Forum PHP.pl > Forum > Przedszkole
krzychu0808
Przepraszam zły dział to się nadaje do przedszkola. Proszę o przeniesienie

Witam..
Napisałem sobie program na liczenie silnie i ładnie działa jak zorbie:
14!=87178291200
5!=120
ale gdy dam silnie powyżej 14 np:
15!=1.307674368E+012
16!=2.0922789888E+013
77!=1.45183092028E+113

Jak zrobić aby wynik silni powyżej 14 był normalną liczbą
piotrooo89
rround
krzychu0808
użyłem round i nadal to samo:

15!=1.307674368E+012
piotrooo89
ale jak użyłeś? pokaż kod.
krzychu0808
  1. <?php
  2. $wynik1=round($wynik);
  3. ?>
piotrooo89
przeczytaj manual jeszcze raz i zwróć uwagę na drugi argument funkcji dokładność
krzychu0808
to jest tylko do ilu miejsc po przecinku ma być dokładne obliczanie ustawiłem 0,3,-3 i nadal to samo....
Orkan
przylaczam sie do pytania.
probuje przekazac UNIX-owy znacznik czasu do JavaScript-u, a tu jak wiadomo czas liczy sie w milisekundach wiec wynik trzeba pomnozyc przez 1000 przez co wychodzimi poza zakres 4 bajtow i PHP dodaje to nieszczesne E.
Jest jakis sposob na uzyskanie samego ciagu cyfr np. jako string?
erix
Cytat
Jak zrobić aby wynik silni powyżej 14 był normalną liczbą

Używaj BCMath.

Cytat
probuje przekazac UNIX-owy znacznik czasu do JavaScript-u, a tu jak wiadomo czas liczy sie w milisekundach wiec wynik trzeba pomnozyc przez

W sekundach, niczego nie trzeba mnożyć, wszystko powinno być ok. Ale załóż osobny wątek, podaj jakiś kod.
krzychu0808
hmmm nie mogę znaleźć w maualu php BCMath

ok znalazłem w manualu ale ja nie mam wpływu na ustawienia serwera... ma ktoś jakieś sugestie jak to wyciągnąć bez zmian w pliki php.ini
erix
Nie zmienisz, gdyż liczby nie mieszczą się w zakresie integer. Albo BCMath, albo wcale.

Poza tym, sprawdź w phpinfo" title="Zobacz w manualu PHP" target="_manual, czy nie masz wkompilowanej tej biblioteki, bo dość często jest obecna.
zegarek84
przerobiłem swój sumator który był potrzebny mi na stronę do zadania:
https://www.tdhack.com/tdh-files/net/webtask2/wielkie.php

funkcja która liczy silnie z dowolnej liczby (zrób na koniec unset() na wszystkich zmiennych - chcesz to zoptymalizuj - tak na szybko przerobiony sumator długich liczb operujący na stringu):
  1. <?php
  2. function silnia($liczba){$liczba=floor($liczba);$x=($liczba<1)?'0':'1';
  3. for($y=1;$y<=$liczba;++$y){
  4. $ile=-1*strlen($x)-1;
  5. $suma='';
  6. $d=0;$j=0;
  7. for($i=-1;$i>$ile;--$i)
  8. {$z=substr($x,$i,1)*$y+$d;
  9. if($z<10){$j=$z;$suma=$j.$suma;$d=0;};
  10. if($z>9){$j=$z%10;$suma=$j.$suma;$d=floor($z/10);};
  11. } if($d>0) $suma=$d.$suma;$x=$suma;} return $x;}
  12.  
  13. echo '<br/>'.silnia(43).'<br/>';
  14. ?>
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.