Autor Zpráva
Jirik001
Profil *
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
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));
Musíš ale počítat s tím, že kvůli těm nepřesnostem vznikají v průběhu výpočtu chyby. Ovšem ty se projeví až při práci s vysokými řady jak je ukázáno v poslední ukázce. Ale pro čísla se kterými se nejspíš reálně potkáš to je vždy v pořádku.
DarkMeni
Profil
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
Pokud číslo přijde od uživatele jako string, tak pro některé kontroly lze použít regulární výraz.

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:

0