Autor | Zpráva | ||
---|---|---|---|
KryVosa Profil * |
#1 · Zasláno: 1. 4. 2015, 15:19:52
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'); Jenom pozor na přesnost čísel: Živá ukázka Upraven odkaz na ukázku |
||
smitka Profil |
#3 · Zasláno: 1. 4. 2015, 15:45:39
function jeCisloDesetinne(x) { return x === +x && x !== (x|0); } |
||
Chamurappi Profil |
#4 · Zasláno: 1. 4. 2015, 16:24:57
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 |
#5 · Zasláno: 1. 4. 2015, 19:20:58
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 |
#6 · Zasláno: 1. 4. 2015, 20:28:28
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 |
#7 · Zasláno: 1. 4. 2015, 20:43:15
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.
|
||
Časová prodleva: 9 let
|
0