Autor Zpráva
pollo22
Profil
zdravim vas. vypočitavam určitu sumu cez js a potrebujem vysledok okresať na 2 desatine miesta. (124.23)
Cez php-čko by som to riešil cez number_format ale neviem ako to spraviť cez JS. viete mi niekto poradiť?
Kajman_
Profil *
Math.rand()
Kajman_
Profil *
Pardon,

Math.round()
_es
Profil
Ak x je číslo a napríklad 3.1 treba zobraziť ako 3.10 tak:
x.toFixed(2)
Chamurappi
Profil
Reaguji na _es:
Tato metoda není spolehlivá. Pokud v proměnné x bude třeba 0.008, tak Explorer vrátí 0.00 a ostatní prohlížeče 0.01.
_es
Profil
Chamurappi
tak potom najprv round, potom toFixed a možno sa bude pollo22ovi (predchádzajúce dotazy) hodiť aj toLocaleString:
var x=0.008;
x1= Math.round(x*100)/100;
x2 = (Math.round(x*100)/100)).toFixed(2);
x3 = (Math.round(x*100)/100).toLocaleString()
Nech si vyskúša všetky možnosti.
pollo22
Profil
_es
Použil som možnosť x3.
V podstate to roby to čom som chcel avšak je tu ešte menši problem. malo by vratiť 3404,6 ale mne vráti 3 407,25 čiže je tam rozdiel nejake tri koruny. Neviete prečo? nesuvisi to s zaokruhlovaním? Ak krátim celým číslom tak je to ok. Netraba mi sice nikde kratiť čislom 2.9 ale chcem vedieť ako to riešiť kebyže som to v buducnosti potreboval.
_es
Profil
Napíš čo je x a čo to vracia, skús rôzne prehliadače. Musíš zabezpečiť, aby x bolo číslo, alebo reťazec v presnom tvare čísla.
Metóda toLocaleString vracia číslo v miestnom formáte, takže pri rôznom nastavení národného prostredia budú rôzne oddeľovače tisícov, desatinná čiarka/bodka a pod.
Podľa mňa to je žiadúce, každému sa čísla zobrazia tak, ako je zvyknutý.
pollo22
Profil
_es
x môže byť hocijake číslo. x je suma, ktorá sa prepočitáva kurzom 30.1260.
_es
Profil
pollo22
Asi to nejako zle počítaš, zaokrúhľuješ na zlom mieste výpočtu a pod.
malo by vratiť 3404,6 ale mne vráti 3 407,25
Aké máš x, ktoré dosadzuješ do Math.round(x*100)/100 z ktorého by ti podľa teba malo vyjsť 3404,6 no vyjde ti 3 407,25?
peta
Profil
pollo22
mas hotovy konkretni priklad? ne? pak proc se ptas na reseni v pripade, ze ti vyjde 3 407,25 a melo vyjit 3404,6 ? Jak my mame zjistit z ceho jsi k tomu vysledku dospel?

x3 = (Math.round(x*100)/100).toLocaleString()
Na tuhle funkci bych rozhodne nespolehal.

x.toFixed(2)
Tahle funkce se chova v kazdem prohlizeci jinak, obvykle nefunguje, viz pripad Opera 8, tusim. Mel jsem pocit, ze v IE a FF se to chova stejne, ale jak tak ctu, zrejme ne.
'0.008, tak Explorer vrátí 0.00 a ostatní prohlížeče 0.01'
IE to vraci chybne, protoze podle literatury, kterou znam ja, ma dojit k zaokrouhleni round.
http://javascript-reference.info/#numberstring
V te same se pise o toLocaleString jako o problemove funkci.

Jak by mel vypadat ten priklad, aby se dal resit?
n = 100;
x = 3404,6;
s = ((Math.round(x*n)/n) + 1/(10*n)) + ''; //prevod na str
y = substring(0,s.length-1);
alert(y)
Vim, co je vstup, znam rovnici, od tebe vim, co chci na vysledku
_es
Profil
peta
toLocaleString jako o problemove funkci
Robí to, čo má, zobrazí číslo podľa miestnych zvyklostí a podpory prehliadača, teda niečo iné Čechovi a niečo iné Angličanovi.
Ak to tak vyhovuje, tak sa použije, ak nevyhovuje, použije sa niečo iné.

Jak by mel vypadat ten priklad, aby se dal resit?
x = 3404,6;“ takže x bude 3404.0
y = substring(0,s.length-1); “ asi si chcel y = s.substring(0,s.length-1);

Vim, co je vstup, znam rovnici, od tebe vim, co chci na vysledku
ak n bude 100 a x bude 1.4 tak y sa ti "zaokrúhli" na 1.400999999999999

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0