Leser: 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# Zahlen der Form 12345 bzw. 77.9 in für Vergleich notwendige Schreibweise 12345.00 bzw. 77.90 umwandeln sub toVolleZahl { my $wert = $_[0]; # ALLE " " (Leerzeichen) entfernen $wert =~ s/\s//g; # falls in der Form: (beliebig viele Zahlen von 0-9).(zwei Zahlen von 0-9) --> bereits richtig if ($wert =~ /\d*\.\d\d/) { return $wert; } # falls $wert gleich: (beliebig viele Zahlen von 0-9) kein Punkt elsif ($wert =~ /\d+^\./) { $wert .= ".00"; return $wert; } # falls $wert gleich: (beliebig viele Zahlen von 0-9).(eine Zahl von 0-9) elsif ($wert =~ /\d+\.\d/) { $wert .= "0"; return $wert; } }
Guest ThomasDas Problem ist, dass die ausgelesenen Zahlen z.B. 234.00 lauten, die berechneten Werte aber 234 sind und der Vergleich damit fehlschlägt.
2010-02-10T13:06:52 biancaUnd 234.00 == 234 ist true.
2010-02-10T13:08:14 betterworldQuizfrage: Warum ist auch 234.00 eq 234 true?
"234.00" eq "234"
2010-02-10T13:29:47 sid burnDein Vorposter hätte für einen besseren vergleich wohl
Code: (dl )"234.00" eq "234"
schreiben sollen.
Guest ThomasWie sieht Dein Vergleich denn aus?Zahlen. Das Problem ist, dass die ausgelesenen Zahlen z.B. 234.00 lauten, die berechneten Werte aber 234 sind und der Vergleich damit fehlschlägt.
1 2 3 4 5 6 7 8
if ($summe_berechnet == $summe_ausgelesen) { print "richtig"; } else { print "Fehler"; }
1
2
3
4
5
6
7
8
9
$ perl -lwe 'use Devel::Peek; my $x = 15; $x += .1 for 1..10; Dump $x; print $x; printf "%.20f\n", $x'
SV = PVNV(0x8151ff0) at 0x814f69c
REFCNT = 1
FLAGS = (PADBUSY,PADMY,NOK,pNOK)
IV = 15
NV = 16
PV = 0
16
15.99999999999999644729
1
2
3
4
5
6
SV = PVNV(0x3e85e4) at 0x9bb754
REFCNT = 1
FLAGS = (PADMY,NOK,pNOK)
IV = 18035
NV = 18262.94
PV = 0
1
2
3
4
5
6
7
8
SV = PVNV(0x3e862c) at 0x980e1c
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
IV = 0
NV = 0
PV = 0x9806e4 "18262.94"\0
CUR = 8
LEN = 12
Guest ThomasDas sollte die berechnete Variable sein:
print (unpack "H*", pack "F", $summe_berechnet);
90c2f528bcd5d140
print (unpack "H*", pack "F", $summe_ausgelesen);
8fc2f528bcd5d140