Autor | Zpráva | ||
---|---|---|---|
miamia Profil |
#1 · Zasláno: 7. 9. 2011, 00:21:38
zdravím všetkých,
zistil som, že takáto vec Math.floor( 100.05/(5/100) ) vráti výsledok 2000 namiesto 2001. ale na počudovanie toto Math.floor( 10.05/(5/100) ) vráti správnu hodnotu 201. Neviete prečo mi to pri vyšších číslach zle počíta? vďaka vopred |
||
Chamurappi Profil |
#2 · Zasláno: 7. 9. 2011, 00:26:55
Reaguji na miamiu:
Viz Výsledkem výpočtu 1 - 0.9 není přesně 0.1. Dělení 100.05/(5/100) vyjde (nejen v JavaScriptu) 2000.9999999999998 , což je při zaokrouhlení dolu 2000.
|
||
miamia Profil |
#3 · Zasláno: 7. 9. 2011, 00:58:39
vďaka Chamurappi, to som teda nečakal. a dá sa to prosím nejako uspokojivo ošetriť?
|
||
_es Profil |
#4 · Zasláno: 7. 9. 2011, 01:29:24
miamia:
„dá sa to prosím nejako uspokojivo ošetriť?“ Zobrazovať čísla len s menšou presnosťou než umožňuje ich zápis v IEEE 754, teda vhodne zaokrúhľovať výsledky. |
||
nemeja Profil |
#5 · Zasláno: 7. 9. 2011, 06:40:06
Muzes pouzit fci round(). ta ti to zaokrouhli nahoru
|
||
Časová prodleva: 3 roky
|
|||
Filipkoss Profil |
#6 · Zasláno: 15. 11. 2014, 17:35:58
miamia:
I když to není problém Math.floor(), tak doporučují místo: Math.floor(a) ~~a if(a.indexOf(b)==0) => if(~a.indexOf(b))
Je to operátor BITWISE NOT, vlastně ~a == Math.floor(-i-1)
|
||
_es Profil |
#7 · Zasláno: 15. 11. 2014, 19:18:12
[#6] Filipkoss:
To nie je dobré používať, lebo sa tým zmenší rozsah čísel na 32 bitové celé čísla: alert(Math.floor(3e9)) // 3000000000 alert(~~(3e9)) // -1294967296 |
||
Chamurappi Profil |
#8 · Zasláno: 15. 11. 2014, 19:50:25
Reaguji na Filipkosse:
„Je to rychlejší, stručnější“ Rozdíl v rychlosti není zase tak zásadní a člověk si musí dávat pozor, aby byl v intervalu [0; 2147483648] . Na záporná čísla vyšší než -2^31 fungují bitové operátory jako Math.ceil .
„ if(a.indexOf(b)==0) => if(~a.indexOf(b)) “
Špatně. První podmínka je true pouze tehdy, pokud je b na začátku a , druhá vyjde kladně, kdykoliv je b uvnitř a .
|
||
Časová prodleva: 9 let
|
0