21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
KryVosa
Profil *
Potřeboval bych javascriptovou podmínku, něco jako
if(jeCisloDesetinne(45,22148)) alert('Ahoj');
juriad
Profil
KryVosa:
Můžeš porovnat původní číslo a číslo zaokrouhlené; pokud jsou shodná, je to celé číslo:
if (cislo == Math.round(cislo)) alert('Ahoj');
Mimochodem, literály desetinných čísel se snad ve všech programovacích jazycích píší s desetinnou tečkou.

Jenom pozor na přesnost čísel: Živá ukázka
Upraven odkaz na ukázku
smitka
Profil
function jeCisloDesetinne(x) {
    return x === +x && x !== (x|0);
}
Chamurappi
Profil
Reaguji na KryVosu:
Já bych použil modulo:
if(cislo % 1) alert("Je desetinné");


Reaguji na smitku:
x === +x
Proč bránit automatickému přetypování? Na jeCisloDesetinne("4.5") bych očekával true.

x !== (x|0);
To se špatně vyhodnotí pro čísla 2^31 a vyšší a pro čísla nižší než -2^31.
Krom toho samotná tahle podmínka díky operátoru !== také vylučuje automatické přetypování, takže ta první složka je už tuplem zbytečná.


Reaguji na juriada:
Jenom pozor na přesnost čísel: Živá ukázka
To je pěkná ukázka.
smitka
Profil
Chamurappi:

x === +x je právě test, zda je zadáno opravdu číslo a ne řetězec, záleží čeho chci dosáhnout.

Pokud chci vyloučit řetězce, tak je první podmínka nutná, protože se ptám zda druhá neplatí, takže by mi "4.5"!==("4.5"|0) vrátilo true, stejně tak jako třeba 'a'!==('a'|0).

S omezením je to pravda, protože binární operace (mimo posunů) převádí 64bitové číslo na 32bitové, takže prakticky dojde k oseknutí. Opět otázka co potřebuji, pokud budu pracovat s desetinkami u čísel nad 4 miliardy, tak to fungovat nebude.
Chamurappi
Profil
Reaguji na smitku:
stejně tak jako třeba 'a'!==('a'|0).
Máš pravdu, pardon, trochu jsem se do toho zamotal. Ono by vyšlo kladně i "5" !== ("5"|0).

binární operace (mimo posunů) převádí 64bitové číslo na 32bitové
Posuny také.
smitka
Profil
Chamurappi:

Posuny také.

Měl jsem zato, že alespoň operátor >>> funguje i v 64bit, ale zdá se, že ani to ne, díky za info, zrevidoval jsem si trochu znalosti.
_es
Profil
smitka:
Měl jsem zato, že alespoň operátor >>> funguje i v 64bit
Operátor má zmysel iba pre celé čísla a JavaScript používa na všetky čísla 64 bitový formát s pohyblivou čiarkou (https://en.wikipedia.org/wiki/Double-precision_floating-point_format#IEEE_754_double-precision_binary_floating-point_format:_binary64) a tam sa 64 bitový integer nezmestí - nejaký bitový posun by nemal zmysel.
1Pupik1989
Profil
>>> slouží na převod na unsigned integer (zero fill right shift). Čili u 8 bitového čísla bude 0 - 255 oproti int, který má -127 - 127. Ve funkci bych očekával jako vstup float. Dal by se přidat i parseFloat.

Nicméně >>> je v tomto případě nevhodné. Buď obyčejný >> nebo ~~. Dvojitá binární negace se používá jen zřídka.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0