Autor Zpráva
Kub.
Profil *
Ahoj,
    function timeDivisibility($int,$factor) 
    {
        if( isset($int) && isset($factor) ) 
        {
            $result = $int%$factor;
            if( $result == 0) {
                echo $int . "je celé číslo";
            }
            else {
                echo $int . "není celé číslo";
            }
        }
    }
    timeDivisibility(14,6);

Tohle je současný kód řeší, zda-li je vstup celé číslo. Rád bych obohatil skript o možnost v else. Pokud není číslo dělitelné 6, aby se jím stalo, například do výstupu $new_int. Nějak mě nenapadá moc řešení, jen je vypsat v $i a případně porovnat. Díky moc za rady.
Sir Tom
Profil
Kub.:
Také ahoj, moc nevím, o co se snažíš, ale:

$new_int = $int * $factor;

A nové číslo bude dělitelné factorem (6).
Kub.
Profil *
Uživatelé mají možnost využít nějaké služby, která však trvá určitý časový limit. Tuto věc můžou opakovat, čímž se zvedá cena služby i čas jejího splnění, vždy jde o určitý násobek. Jelikož však je několik služeb a každá trvá jinou dobu a stojí jinou cenu, násobky se potom liší. Tudíž mám například v sekundách dobu splnění další úrovně: 180 sekund. Do další úrovně je potřeba 180*koeficient. Takže výsledek je například 388. Ve výsledku mám potom čas odpočtu v tomto formátě: HH:MM:SS - 00:54:47 (např.) potřebuji však všechny časy zaokhroulit na 0 - takže 00:45:50.

Jelikož jde o 60tkovou soustavu, musím z čísla udělat číslo, které bude takhle krásně dělitelné, beze zbytku.
Ugo
Profil
$new_int = {round/ceil/floor}($int/$factor) * $factor;

tušim že tady se nedávno řešilo i lepší řešení, ale tohle je lehké a jasné
Kub.
Profil *
Ugo:
Tohle rozhodně nebude řešením, číslo musí být nejbližší po násobené časové proměnné. Tudíž pokud je číslo 388, musím najít číslo, které bude nejblíže po něm dělitelné.


Moje chyba, já to blbě přečetl. Zkusím to nahodit. Díky
Ugo
Profil
ok, np :-P
Kub.
Profil *
Moje chyba, ještě jednou promiň. Já jak četl hned { a round... tak jsem si říkal a jéje, že zas budu muset vysvětlovat. Každopádně je to určitě dobře a výsledek je takto:

    function timeDivisibility($int,$factor) 
    {
        if( isset($int) && isset($factor) ) 
        {
            $result = $int%$factor;
            if( $result == 0) {
                $new_int = $int;
            }
            else {
                $new_int = ceil($int/$factor) * $factor;
            }
            return $new_int;
        }
    }

Kdyby někdo potřeboval.
Joker
Profil
Ugo:
tušim že tady se nedávno řešilo i lepší řešení
Myslím, že to bylo: výsledek = x + (x modulo faktor)
(nejbližší vyšší číslo od x dělitelné faktorem)

Oprava, ne děleno, ale modulo
Kub.
Profil *
Joker:
To už na rychlosti moc nepřidá, takže to je asi jedno. Každopádně díky.
Alphard
Profil
[#7] Kub.
V té funkci je na isset() pozdě, jestli ty proměnné neexistují, zařve to dřív. Maximálně kontrolovat, jestli jde o celá čísla.
A pak se nabízí tu to podmínku zkrátit ternárním operátorem.

[#9] Kub.
Autorem byl Chamurappi a pak to i vysvětloval.
Kajman
Profil
Joker:
výsledek = x + (x modulo faktor)

S mínusem to funguje k nalezení nižšího, ale pro vyšší nestačí použít plus.

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: