Thread Perl Bug bei int?
(44 answers)
Opened by Rolf_PlusW at 2013-03-01 11:29 2013-03-01T17:15:29 GUIfreund Nein. Es geht nur entweder oder aber nicht beides. 2013-03-01T17:15:29 GUIfreund Dann ist es kein int() ! 2013-03-01T17:15:29 GUIfreund Das verstehe ich jetzt nicht. Hatten wir nicht damals schon festgestellt, dass dein sprintf() nicht ausreicht? Du warst doch beteiligt damals, oder nicht? 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 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 48 49 #!/usr/bin/perl use strict; use warnings; my $space = '.' x 25; my ($int,$erwartet); foreach my $test ( -19854.94 - -3970.99 - -15883.95,'=0', .57 * 100,'=57', .58,'=0', 12.345,'=12', 57.00000000000000001,'=57', 0.000000000000001,'=0', 1.01205,'=1', -0.903,'=0', -1.9999999 + .000000099999999,'=-1' ) { if (substr ($test,0,1) eq '=') { $erwartet = substr($test,1); print "Erwartet '$erwartet'\n\n"; } else { $int = GUIfreund($test); print "\'$test\'".substr($space,0,25 - length ($test))."geINTet mit GUIfreund: \'$int\'".substr($space,0,25 - length ($int))."\n"; $int = integer($test); print "\'$test\'".substr($space,0,25 - length ($test))."geINTet mit Bianca : \'$int\'".substr($space,0,25 - length ($int))."\n"; } } ############################################################################### sub GUIfreund { sprintf('%.0f',$_[0]); } sub integer { my $wert = shift ( @_ ) || 0; if ($wert =~ /e\-\d+$/) { return 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; $wert = 0 if $wert == -0; } return $wert; } Quote sprintf() macht hier drei Fehler, soweit ich das sehe. Aber vielleicht hast du auch eine andere Auffassung davon, was int bedeutet. Für mich bedeutet es das fehlerfreie Abschneiden der Nachkommastellen ohne irgendwelche Rundungen. Denn wenn ich Rundungen haben will habe ich kein int() :) Aber zum Runden ist sprintf() noch viel mehr ungeeignet als zum int'en. Last edited: 2013-03-01 19:37:40 +0100 (CET) 10 print "Hallo"
20 goto 10 |