Autor Zpráva
Marťan04
Profil *
Můžu se zeptat, dá se v JavaScriptu počítá s procenty? Jestli ano, jak? Děkuji za odpověď.
Radek9
Profil
Marťan04:
Jistě, že dá. Stejně jako v jakémkoli jiném jazyce. Počítáš se setinami. :-) Např. 80 % = 0.8, 15 % = 0.15 atd.
Joker
Profil
Radek9:
V některých případech může být výhodnější s procenty počítat jako s celými čísly (například 80% je 80).
1Pupik1989
Profil
Použil bych oba případy. Viz. css vlastnost opacity vs. filter alpha.

Většinou se ale přikláním k desetinnám.

příklad:
200/100*80 = 160
200*0.8=160

a naopak
200/100*80/100 = 1.6
200*0.8/100 = 1.6

Asi mám pořád zafixováno, že násobení je nepatrně rychlejší než dělení. Samozřejmě příklad jde i zkrátit.
Joker
Profil
1Pupik1989:
Ono to není úplně na libovůli programátora ve smyslu „Vyberte si co co se vám víc líbí a to pak používejte všude“.
Naopak každý programátor by měl volit řešení, které je v dané situaci lepší.

Procenta jako desetinná čísla se samozřejmě hodí v případě, kdy mám počítat to procento z něčeho (což je příklad v [#4], pokud potřebuji spočítat 80% z 200, je lepší těch 80% mít jako desetinné číslo).

Zároveň je nutné pamatovat na nepřesnost uložení reálných čísel v paměti, takže pokud mám procenta v pevné řádové čárce (obvykle celé číslo, čili v dané situaci se počítá jen s celými procenty a ne třeba 81,5%) a navíc spíš než výpočet tolika procent z něčeho dělám operace s těmi samotnými procenty, je výhodnější naopak celé číslo.
Příklad:
var slevaProc = 90;
var novaProc = 100 - slevaProc;
alert("Sleva " + slevaProc + "%, tedy zaplatíte jen " + novaProc + "% původní ceny!");
→ „Sleva 90%, tedy zaplatíte jen 10% původní ceny!“

var slevaProc = 0.9;
var novaProc = 1 - slevaProc;
alert("Sleva " + slevaProc*100 + "%, tedy zaplatíte jen " + novaProc*100 + "% původní ceny!");
→ „Sleva 90%, tedy zaplatíte jen 9.999999999999998% původní ceny!“
Keeehi
Profil
A kvůli té nepřesnosti, kterou zmiňoval Joker, tak nejdříve násobit a pak teprve dělit.
ANO 200*80/100
NE  200/100*80
U 200 to zrovna nevadí, ale třeba u 30 ano.
Marťan04
Profil *
Marťan04:
Když mám třeba číslo 230 jak ho mám převést na číslo od jedné do sta?
margin
Profil *
Marťan04:
Když mám třeba číslo 230 jak ho mám převést na číslo od jedné do sta?
Ta otázka nemá smysl.
1Pupik1989
Profil
Joker:
var slevaProc = 0.9;
var novaProc = (1 - slevaProc).toPrecision(15);

alert("Sleva " + slevaProc*100 + "%, tedy zaplatíte jen " + novaProc*100 + "% původní ceny!");

Používám toPrecision nebo toFixed. toPrecision nesmí bohužel být více jak patnáct, pak nastává ta nepřesnost (u toFixed nevím). Sice není dobré řetězec násobit číslem, ale funguje to. Jsem hodně zvyklý na desetinná čísla a od dob co používám matice vlastně nic jiného nevidím.
peta
Profil
Marťan04:
Co je 230?
230 = 230
230% = 230/100 = _ 2.30 _

Jak jako prevest 230 od 1 do 100? Myslis jako primou umeru jako v matice? Znas maximalni hodnotu?
100% = 1000
x% = 230
-------------
230/1000 * 100% = 23%
23% = 23/100 = _ 0.23 _
_es
Profil
1Pupik1989:
Používám toPrecision nebo toFixed.
Ale tieto metódy vracajú textový reťazec a nie číslo. Na zaokrúhľovanie čísel je vhodná funkcia Math.round.
1Pupik1989
Profil
Mě trochu nedošlo, že přes toPrecision to proženu až u výstupu. Nicméně, že z toho bude řetězec jsem psal. Pravda, je, že ohodně hezčí by to bylo přes Math.round. Jako:

var slevaProc = 0.9;
var novaProc = 1 - slevaProc;
 
alert("Sleva " + (slevaProc*100) + "%, tedy zaplatíte jen " + Math.round(novaProc*100) + "% původní ceny!");

Navíc na textový řetězec jde použít matematické funkce, pokud je vyplněn pouze čísly.

var a = "33.3"
var b = 3
alert(a/3); //11.1

Takže asi tam jsem se nejspíše sekl.
_es
Profil
1Pupik1989:
Navíc na textový řetězec jde použít matematické funkce, pokud je vyplněn pouze čísly.
JS prevádza v niektorých prípadoch automaticky textové reťazce na čísla - operácia delenia je teda len s číslami. Okrem toho môže spoliehanie sa na automatický prevod viesť k ťažko odhaliteľným chybám:
Ak sú x a y čísla, čo vráti výraz (x.toPrecision(15) + y.toPrecision(15))?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0