Autor Zpráva
houbeless
Profil
Zdravim,
Mám číslo v db, které je vždy typ decimal, ale ne vždy je desetinné, bývá i jen celé.
Když dotazem dostanu toto číslo, potřeboval bych zjistit nějakou funkcí, jestli je celé nebo jsou za desetinnou čárkou nějaká čísla(tj. zda je desetinné).
Nevíte jak jednodušet toto zjistit?
PS: nepotřebuji nějaké zaokrouhlování, absolutní číslo a podobně..
Díky
r0me0
Profil
žeby is_float() ?
Joker
Profil
Například: číslo má desetinnou část, pokud rozdíl toho čísla a jeho celé části dá nenulový výsledek.
houbeless
Profil
Joker
No jasně, takhle to taky jde, že se to spočítá.
Podle vás tedy není přímo funkce na ověření, jestli jsou za des. čárkou nějaká čísla nebo nuly?
tiso
Profil
Nie je.
houbeless
Profil
Tak pěkně děkuju :)
tiso
Profil
Ale funguje kombinácia funkcií: if(!is_int((int)$cislo) AND is_numeric($cislo)){//$cislo je desatinne
houbeless
Profil
No ale tady stačí použít is_float, já nepotřebuju zjistit, že číslo je des. - to vím, to je vždycky. Já potřebuju zjistit případy, kdy je celé, bez desetin, nebo kdy má za čárkou další čísla...
Joker
Profil
ad r0me0, tiso: jenže to jsou funkce PHP, celou část (případně absolutní hodnotu nebo zaokrouhlení) a rozdíl by šlo dostat už přímo do databázového dotazu.
houbeless
Profil
to je fakt, že bych se mohl zeptat přímo sqlem, jestli to pujde. mrknu do manuálu..
houbeless
Profil
Ale vlastně to neni potřeba, já to celé číslo potřebuju řešit jen na úrovni php. jestli to jde v sql, je jen pro zajímavost..Díky
djlj
Profil
V SQL tu část vybereš pomocí SUBSTRING_INDEX.
koudi
Profil
Jde ti o to, jestli to tam čistě je/není, nebo potřebuješ i tu hodnotu. Z db by to (v případě mysql) šlo třeba sloupec - FLOOR(sloupec) as DesetinnaCast
houbeless
Profil
vyřešil jsem to v php takto:
$wholenum = $number;
$wholenum = number_format($wholenum,0); // (popř. floor)
if (($number - $wholenum) == 0) {
$number = number_format($number,0,'',' ');
} else {}
echo $number;

Sql je už tak docela dlouhý, nebudu to komplikovat.
Joker
Profil
Místo number_format bych použil raději floor.
Jednak je to použití funkce k účelu, ke kterému se nehodí a jednak to skoro určitě bude mít větší režii, než floor.

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: