Invalid Float Point Operation

0
function TMainForm.CountSkill(Kills, Deaths: Integer): Integer;
var
  val: Extended;
begin
  if Deaths > 0 then
    val := Kills/Deaths;

  val := val * (Kills * 0.01);
  val := val * 100;

  Result := Round(val);
end;

Co tu moze pojsc nie tak? Zakladajac, ze Kills i Deaths moga byc dowolna wartoscia Integer'a.

else val:=1;

Po co?

val = 0 * Kills * 0.01 = 0
0 * 100 = 0

:-8

0
function TMainForm.CountSkill(Kills, Deaths: Integer): Integer;
var
   val: Extended;
begin
   if Deaths > 0 then
      val := Kills/Deaths
    else val:=1; // Może o to chodzi ?

   val := val * (Kills * 0.01);
   val := val * 100;

   Result := Round(val);
end; 
0

val := val * (Kills * 0.01);
val := val * 100;

Dlaczego nie zrobisz: val := val*Kills; ?
Nie moglbys tak postapic tylko wtedy, gdy ten iloczyn bylby bardzo mala liczba i zalezaloby ci na utracie dokladnosci. Ale wtedy wlasnie ten blad moglby wystapic, bo kompilator sygnalizowalby ci wlasnie utrate tej dokladnosci i zaokraglenie do zera.

0

hmm wlasciwie na dokladnosci mi zalezy ale moze cos wymysle...

Przy val := val * Kills tez sie sypie [glowa]

OK zmienilem Extended na Currency, jak na razie nic nie wyskoczylo ;) [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1