Autor Zpráva
PHP_Nemaster
Profil
Dobrý den, stala se mi dnes taková věc. Nefunfuje mi floor ani ceil tak jak má.
Dělám něco jako hru a mám takový to kód, který ošetřuje bitvu.

// vypočítá, kolik procent z útoku je obrana, toto procento představuje vojáky zabité v útoku z celkového počtu útočníků.

$count_proc_cattack = $defense * 100 / $atw;

// Vydělí výsledek na 100, aby se ztráty nepočítaly jako třeba 5000 * 75, ale 5000 * 0.75 .

$cpking = $count_proc_cattack / 100;

// Zaokrouhlí, a tady nastává chyba, pokaždé to vyhodí nulu. Při ceil to vyhodí plný počet jednotek.
$floor_cpking = floor( $cpking );

//Ošetří ztráty, ale nefunfuje.
$casualties_king = $_POST['king'] * $floor_cpking;

if ( $casualties_defense > $defense ) {
$casualties_defense = $defense; }


Pokud jste to nepochopili ( což je asi dost pravděpodobné :( ), tady jsou obrázky:

Tohle se mi stane, pokud nepoužiji floor ( výsledek je správný, ale chtěl bych to bez desetin ) :
http://amaga.czweb.org/floor_nefunkcni.jpg

Tohle chci udělat: http://amaga.czweb.org/takto_ma_vypadat.jpg
A tohle se mi děje, když použiji floor(): http://amaga.czweb.org/nula.jpg.jpg

Předem děkuji za odpověd'.

( PS: Nechtěl jsem zahlcovat fórum celým zdrojem ( asi 2x delším než uvedený "výstřižek" ), v případě potřeby ho však určit pošlu ).
Nox
Profil
Bylo by asi lepší celý kód, ale... co je v tom postu? Nejdřív zaokrouhlíš a pak zase násobíš, nemůže to být tím? floor funguje skoro na 100% dobře,
nejspíš buď je číslo modifikované ještě po jeho aplikaci, nebo výsledek zakrouhlení nějak není použitý nebo něco, nevim, bez kódu by to bylo hádání,
tak prosím kód a vstupní hodnoty
tiso
Profil
PHP_Nemaster: aká je hodnota $cpking?
btw. strašné názvy premenných...
keeehi
Profil
PHP_Nemaster:
Jaké jsou např počáteční hodnoty těch proměných?

pokud je v proměné $cpking to 0.75 pak to není chyba ve flooru, ale v tvojí matemtice

procenta => $cpking => $floor_cpking
0% => 0.0 => 0
20% => 0.2 => 0
99% => 0.99 => 0

když floor zaokrouhluje vždy dolů, a ty máš vstup v rozmezí 0-1, tak kromě 100% => 1 ti to zaokrouhlí dolů na tom není nic divného. Nejspíš jsi to chtěl napsat takto
$casualties_king = floor($_POST['king'] * $cpking);
PHP_Nemaster
Profil
Keehi: Přesně tak, děkuju. Nebo rovnou zaokrouhlit výsledek.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: