Autor Zpráva
TomasJ
Profil
Zdravím, potřebuji nějak zaokrouhlit číslo, které má asi 18 desetinných míst, na 2 desetinná místa.
Fakta: Vím, že je na to metoda Math.round() || Math.ceil() || Math.floor() - nicméně žádná tato metoda to nezaokrouhlí výsledek na 2 desetinná místa, nýbrž na celé číslo. Řešení pomocí PHP znám a to nepotřebuji. Poradíte mi někdo jak na to? Děkuji.
Chamurappi
Profil
Reaguji na TomaseJ:
Číslo.toFixed(2)
Nicméně to vrací při některých číslech v různých prohlížečích různé nesmysly.
Napiš si vlastní funkci — vynásob číslo stovku, zaokrouhli Math.roundem a zase ho vyděl stovkou.
TomasJ
Profil
Chamurappi:
Děkuji :) Něco podobného jsem měl, akorát jsem to dělal špatným postupem... Díky moc! :)
_es
Profil
TomasJ:
Viď Javascript - jak vypsat číslo na X desetinných míst?. Pozri si aj tú nekompatibilitu IE.
Chamurappi
Profil
Reaguji na _es:
Pozri si aj tú nekompatibilitu IE.
Nejen Explorer neumí počítat.
TomasJ
Profil
Vskutku. Ve výsledku neumí počítat ani jeden, kromě Safari. Ale ostatní prohlížeče narozdíl od IE mají jen drobnou odchylku... Díky, funkci jsem si udělal, vše jede jak má :)

EDIT: Myslíte, že by se tato funkce dala ještě nějak odlehčit? Měla by plnohodnotně nahradit funkci round(); v PHP.
function Round(num,precision)
{
  var val = 1;
  for(var i=0;i<precision;i++){val=val*10;}
  return Math.round(num*val)/val;
}

Radek9
Profil
TomasJ:
Možná takhle:
function Round(num, precision){
  var val = precision!=undefined?Math.pow(10, precision):1;
  return Math.round(num*val)/val;
}
TomasJ
Profil
Radek9:
No ta ochrana tam být nemusí, jelikož to bude používat jen skript, ne uživatel. Ale jinak je to docela ulehčené od cyklu. Mocnina mě opravdu nenapadla. Díky :)
Soptik
Profil *
Takhle to funguje:


function Zaokrouhli(cislo,pocet_destinych_mist){
         var mocnina = 10;
            for(var i = 1; i < pocet_destinych_mist; i++){
                   mocnina = mocnina * 10;
            }
         cislo = cislo * mocnina;
         cislo = Math.round(cislo);
         cislo = cislo / mocnina;
         return cislo;
         
         }
         
         // Napsal Soptik
Davex
Profil
Soptik:
Nestačilo by něco takového?

function Round(num, precision)
{
  return Number(Math.round(num + "e" + precision) + "e-" + precision);
}
Kajman
Profil
Lepší bude verze s mocninou z [#7], ta umí zaokrouhlit i na stovky díky parametru -2. A vypadá to, že verze z [#10] přestane počítat od 21 desetinných míst.

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: