Thread Fehler beim addieren!: Warum rechnet Perl falsch? (2 answers)
Opened by Kean at 2007-05-16 14:58

Kean
 2007-05-16 14:58
#76734 #76734
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Ich habe eine Subroutine die eine Berechnung durchführt. Im positiven Zahlenbereich klappt das auch ohne Probleme.
Sobald ich aber in den negativen Zahlenbereich gehe kommt es bei manchen Zahlenkonstellationen zu Problemen.

Hier mal der Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
sub ausgabesumme
{
print "Vor Artikel: Umsatzsumme:$umsatzsumme, Wert:$wert\n";
if ($storno_kz == 0 && $neuerkunde == 0)
{
if ($pfand_kz == 1)
{ $summepfand++; $umsatzpfand=$umsatzpfand+$pfand_wert; $summe = $summe + $wert + $pfand_wert; }
else
{ $summe = $summe + $wert; }
print "Bearbeitung 1: '$umsatzsumme' + '$wert'\n";
$umsatzsumme = $umsatzsumme + $wert;
print "Umsatzsumme: $umsatzsumme\n";
$Produkt_zaehler[$pid] = $Produkt_zaehler[$pid] + 1;
$anzeigesumme = formatbetrag($summe);
$vorzeichen = '';
}
elsif ($storno_kz == 1 && $neuerkunde == 0)
{
$summestorno++;
if ($pfand_kz == 1)
{ $summepfand--; $umsatzpfand=$umsatzpfand-$pfand_wert; $summe = $summe - $wert - $pfand_wert; }
else
{ $summe = $summe - $wert; }
$umsatzsumme = $umsatzsumme - $wert;
$Produkt_zaehler[$pid] = $Produkt_zaehler[$pid] - 1;
$anzeigesumme = formatbetrag($summe);
$vorzeichen = '-';
}

if ($neuerkunde == 0)
{ $logsatz = &datum.';'.$wahl.';'.$vorzeichen.$wert.';'.$pfand_kz.';'.$vorzeichen.$pfand_wert."\n"; }

if ($neuerkunde == 1)
{
if ($printerstate == 1)
{
open(AUSGABE, ">>$printer");
print AUSGABE eval('"\x1B\x70\x00\x32\x32"');
close(AUSGABE);
}
$logsatz = &datum.';'."-Neuer Kunde-\n";
}
open (AUSGABE, ">>log.txt");
print AUSGABE $logsatz;
close (AUSGABE);
print "Nach Artikel: Umsatzsumme:$umsatzsumme, Wert:$wert\n";
}


Bei dem Printbefehl Bearbeite 1 gibt er z.b. aus:
Bearbeite 1: '-1.4' + '1.6'

als Ergebnis hat die Variable $umsatzsumme danach aber:
0.199999999999999

Wenn ich den Variablen den Wert -1.4 und 1.6 vorher manuell zuweise rechnet er richtig.
Ich habe auch schon versucht vorher nochmal eine Typumwandlung zu erzwingen indem ich $umsatzsumme_int = $umsatzsumme und $wert_int = $wert schreibe und dann addiere. Hierbei kommt allerdings das gleich Ergebnis zu tage.

Die Variable $umsatzsumme wird ganz am Anfang deklariert und mit 0 initialisiert.

Die Variable $wert wird aus einer Ini-Datei gelesen und mit folgendem Code zugewiesen:

Code: (dl )
$wert = readini($produktnr, PREIS, 'produkte.ini');


Hat vielleicht jemand eine Ahnung an was da liegen könnte?

View full thread Fehler beim addieren!: Warum rechnet Perl falsch?