Autor | Zpráva | ||
---|---|---|---|
Kub. Profil * |
#1 · Zasláno: 4. 4. 2012, 16:27:13
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 |
#2 · Zasláno: 4. 4. 2012, 16:31:05
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 * |
#3 · Zasláno: 4. 4. 2012, 16:43:04
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 |
#4 · Zasláno: 4. 4. 2012, 16:46:44
$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 * |
#5 · Zasláno: 4. 4. 2012, 16:49:30 · Upravil/a: Kub.
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 * |
#7 · Zasláno: 4. 4. 2012, 17:04:24
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 * |
#9 · Zasláno: 4. 4. 2012, 17:16:22
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 |
#11 · Zasláno: 4. 4. 2012, 20:45:54
Joker:
„výsledek = x + (x modulo faktor)“ S mínusem to funguje k nalezení nižšího, ale pro vyšší nestačí použít plus. |
||
Časová prodleva: 11 let
|
0