Autor | Zpráva | ||
---|---|---|---|
Jirik001 Profil * |
#1 · Zasláno: 13. 10. 2018, 22:42:01
Dobrý den,
Potřebuji vymyslet funkci, která zkontroluje číslo, zda-li je možné/použitelné. Mám kontrolu např. 1) Nákup může být libovolně po 0.5 kusech nebo 2) Nákup může být libovolně po 10 kusech A teď mám počet kusů, které si člověk zadá. př. 10, 5, 0.1 atd. a snažím se přijít na to, jak udělat kontrolu, aby vrátila toto 10 => např. ano, možné 0.1 => kontrola po 0.5 => nelze 0.7 => nelze 2.5 => ano lze 2.9124 => nelze.. Děkuji vám za rady |
||
DarkMeni Profil |
Můžeš použít operátor modulo (zbytek po dělení), zapisuje se procentem.
if(($pocet > 0 && $pocet < 10 && $pocet % 0.5 == 0) || ($pocet >= 10 && $pocet % 10 == 0)) { // ok } else { // not ok } Pokud to chápu dobře že do 10 má být krok 0.5 a od 10 už po 10 |
||
Keeehi Profil |
#3 · Zasláno: 14. 10. 2018, 04:27:05
DarkMeni:
Řekl bych že to bude prostší. Potřebuje jen zjistit, zda jedno číslo je násobek čísla jiného. Což je jednoduché pro celá čísla pomocí modula ovšem na oboru reálných čísel, pokid vím, nic takového definovaného není. A Jirik001 nejde o kobinaci podmínek, to co tam má jsou jen personáhodné příklady. Jirik001: Udělá se to tak, že to číslo co zdal uživatel jednoduše vydělíš tou jednotkou a podíváš se, zda co ti vzniklo je celé číslo. Což se nedá udělat přímo, jednak jelikož dělením dvou floatů ti vznikne float a protože reprezentace desetinných čísel v paměti není přesná ( Časté potíže, zajímavosti a poučné debaty » Výsledkem výpočtu 1 - 0.9 není přesně 0.1 ). Proto se podíváš jestli výsledek je dostatečně blízko k nule.
<?php function isDivisible ($n, $d) { $r = $n/$d; return (abs(round($r)-$r) < 0.000000001); } var_dump(isDivisible(10, 0.5)); var_dump(isDivisible(0.1, 0.5)); var_dump(isDivisible(0.7, 0.5)); var_dump(isDivisible(2.5, 0.5)); var_dump(isDivisible(2.9124, 0.5)); var_dump(isDivisible(10000000000000000.1, 0.5)); |
||
DarkMeni Profil |
#4 · Zasláno: 14. 10. 2018, 10:07:05
Keeehi:
„Což je jednoduché pro celá čísla pomocí modula ovšem na oboru reálných čísel, pokid vím, nic takového definovaného není.“ A jo, to mi nedošlo. No.. na moji omluvu, psal jsem to ve 2 ráno. |
||
Kajman Profil |
#5 · Zasláno: 14. 10. 2018, 12:37:58
Pokud číslo přijde od uživatele jako string, tak pro některé kontroly lze použít regulární výraz.
|
||
Časová prodleva: 5 let
|
0