Autor Zpráva
Pája
Profil *
zaklad = 2623.43
dan23 = 550.93
kcs = 3174
dan = 0
hal_vyr = -0,36

jakmile se tam objeví záporné číslo, tak ať jsem tam teď udělal počítání s absolutní hodnotou, tak mi vychází nesmysly.....

výsledkem je 3173.9999999999999995

což je ale logicky nesmysl..... vidíte tam někdo prosím chybu?
Díky

Zde je kód:

<SCRIPT LANGUAGE="JavaScript">


function kontrola()    
{            

if(document.getElementById('kcs').value!="")
{
  var kcs = document.getElementById('kcs').value;
}
else
{
  var kcs = 0;
}

if(document.getElementById('zaklad').value!="")
{
  var zaklad = document.getElementById('zaklad').value;
}
else
{
  var zaklad = 0;
}

if(document.getElementById('dan23').value!="")
{
  var dan23 = document.getElementById('dan23').value;
}
else
{
  var dan23 = 0;
}

if(document.getElementById('dan0').value!="")
{
  var dan0 = document.getElementById('dan0').value;
}
else
{
  var dan0 = 0;
}

if(document.getElementById('hal_vyr').value!="")
{
  var hal_vyr = document.getElementById('hal_vyr').value;
}
else
{
  var hal_vyr = 0;
}

kcs=parseFloat(kcs);
zaklad=parseFloat(zaklad);
dan23=parseFloat(dan23);
dan0=parseFloat(dan0);
hal_vyr=parseFloat(hal_vyr);

if(hal_vyr<0)
{

hal_vyr = Math.abs(hal_vyr);
hal_vyr=parseFloat(hal_vyr);
var cel = (zaklad + dan23 + dan0) - hal_vyr;
}
else
{
var cel = zaklad + dan23 + dan0 + hal_vyr;
}

if(kcs != cel)
{

alert(cel);

return false;
}
else
{
alert("Rovná se");
return true;
}

}
</SCRIPT>
juriad
Profil
Je to správně, tak prostě pracuje počítač s desetinnými čísly.
Časté potíže, zajímavosti a poučné debaty » Výsledkem výpočtu 1 - 0.9 není přesně 0.1
Máš dvě možnosti:
1) zaokrouhlovat na konci výpočtu
2) nepracovat s desetinnými čísly, vůbec; výpočet v korunách můžeš nahradit za výpočet v halířích (těch už je celé číslo).

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:

Prosím používejte diakritiku a interpunkci.

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

0