Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10905[/thread]

numerischer Vergleich

Leser: 3


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Gast Gast
 2007-11-27 16:25
#103141 #103141
Hallo,

ich suche nach einer flexiblen Möglichkeit Zahlen miteinander zu vergleichen. Das Problem das ich habe ist, das ich nicht weiß welcher Dezimaltrenner verwendet wird. Gibt es eine Möglichkeit den Dezimaltrenner automatisch zu erkennen? Mein Vergleich sieht folgendermaßen aus:
Code: (dl )
1
2
3
4
5
6
if(($var1 - $var2) == 0) {
print "gleich\n";
}
else {
print "ungleich\n";
}

Wenn ich da +2.00 und 2 "reinstecke" ist's ok, enthält eine Zahl allerdings ein Komma anstelle des Punktes, kommt eine Fehlermeldung das +2,00 nicht numerisch ist.

Schon mal Danke

Marc
renee
 2007-11-27 16:32
#103143 #103143
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst vorsichtshalber alle Kommas durch Punkt ersetzen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
$var1 =~ s/,/./;
$var2 =~ s/,/./;

if(($var1 - $var2) == 0) {
  print "gleich\n";
}
else {
  print "ungleich\n";
}


Wenn kein Komma vorhanden ist, macht das nix...

Aber Vorsicht wenn Du auch Zahlen im US-Format bekommst, dort sind die Bedeutung von , und . umgekehrt...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2007-11-27 16:58
#103159 #103159
Wieso eigentlich eine so komplizierte if-Bedingung?
Reicht da nicht ($var1 == $var2) aus?

MfG Horst
#Kein Kommentar
 2007-11-27 17:03
#103161 #103161
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
ich glaub es geht eher ums prinzip, aber eigentlich hast du recht
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Taulmarill
 2007-11-27 17:03
#103162 #103162
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Wenn einzelne Zeichen ersetzt werden, sollte man sich angewöhnen tr/// zu benutzen. Also z.B.
Code (perl): (dl )
tr/,/./ for ( $var1, $var2 );
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Gast Gast
 2007-11-27 17:05
#103165 #103165
Taulmarill+2007-11-27 16:03:46--
Wenn einzelne Zeichen ersetzt werden, sollte man sich angewöhnen tr/// zu benutzen. Also z.B.
Code (perl): (dl )
tr/,/./ for ( $var1, $var2 );

Bloede Frage: Warum eigentlich?
#Kein Kommentar
 2007-11-27 17:06
#103167 #103167
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
regexe sind langsamer als funktionen.

s/// ist eine regex
tr/// ist eine funktion
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
renee
 2007-11-27 17:07
#103168 #103168
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ist schneller... und es ersetzt alle Vorkommen auf einmal...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2007-11-27 17:11
#103169 #103169
Achso. Verstehe. Also schneller, performanter.

Danke sehr :)

Gruß

Rperl
Gast Gast
 2007-11-27 17:13
#103170 #103170
Hi Leute,

eine solche Idee, Kommas durch Punkte zu ersetzen, hatte ich auch schon. Dann kam mir aber auch der Gedanke, das bei den Ammis alles anders ist. Daher suche ich nach einer Lösung die den Dezimaltrenner von sich aus erkennt.

Marc
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2007-11-27 16:25.