Thread Richtig INTen
(14 answers)
Opened by bianca at 2009-12-24 09:27
Erstmal fettes FROHE WEIHNACHTEN an alle!
Und dann noch ein kleines Problemchen wo ich um Hilfe bitte. Ich möchte Werte richtig "INTen" und zwar nicht mit int(), denn das macht nicht immer, was ich möchte. Mein Versuchsaufbau: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 my $sub = 'integer1'; my $space = '.' x 25; my ($int,$erwartet); foreach my $test ( .57 * 100,'=57', .58,'=0', 12.345,'=12', 57.00000000000000001,'=57', 0.000000000000001,'=0', 1.01205,'=1', -0.903,'=0', -1.999999999999999,'=-1' ) { if (substr ($test,0,1) eq '=') { $erwartet = substr ($test,1); print " " . ($int eq $erwartet ? ' OK' : " FEHLER! Erwartet \'$erwartet\'") . "\n"; } else { $int = &{$sub} ($test); print "\'$test\'" . substr ($space,0,25 - length ($test)) . "geINTet: \'$int\'" . substr ($space,0,25 - length ($int)); } } Testfall Perl's int(): Ergibt: Code: (dl
)
1 '57'.......................geINTet: '56'....................... FEHLER! Erwartet '57' Macht Fehler bei .57 * 100 und vermutlich auch noch bei anderen Berechnungen. Testfall integer1: Code (perl): (dl
)
1 2 3 4 5 6 7 sub integer1 { my $wert = shift ( @_ ) || 0; if ($wert =~ /^([^\.]*)\.([^\.]+)$/) { $wert = $1; } return $wert + 0; } Ergibt: Code: (dl
)
1 '57'.......................geINTet: '57'....................... OK Macht also Fehler bei -1.999999999999999 und 0.000000000000001. Und die gleichen Fehler habe ich bei diesem Ansatz: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 sub integer2 { my $wert = shift ( @_ ) || 0; if ($wert =~ /\./) { my $neu = ''; for (my $st = 0; $st < length($wert); $st ++) { if (substr($wert,$st,1) eq '.') { last; } else { $neu .= substr($wert,$st,1); } } $neu = 0 if $neu eq ''; $wert = $neu; } return $wert + 0; } Hat jemand noch Ideen, wie ich alle drei Fälle "fehlerfrei" inten kann? Danke und frohes Fest! Last edited: 2009-12-24 09:28:04 +0100 (CET) 10 print "Hallo"
20 goto 10 |