Anzeige:
Ergebnis 1 bis 11 von 11

Thema: Perl abs($x) will nicht

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    80

    Perl abs($x) will nicht

    Hallo,

    Code:
    $test = 1.99;
    $test = abs($test);
    print $test;
    liefert: 1.99

    Ich hätte aber gern 1 raus!

    Code:
    $test = 1.99;
    $test = sqrt($test);
    print $test;
    liefert: 1.41067359796659, sqrt funktioniert also.

    Was ist da los?

    Ben

  2. #2
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Code:
    $test = sprintf("%.0f", $test);
    Code:
    sub round {
        my $n = shift;
        return int($n + .5 * ($n <=> 0));
    }
    Weitere Möglichkeit: Math::Round aus CPAN.

    Auf und Abrunden mittels POSIX::floor und POSIX::ceil.

    Gruss, Andy

    PS: abs() liefert den absoluten Wert zurück, d.h. 1 bei (-1).
    PPS: Das ist z.B. einer der Gründe warum mir Perl nicht passt

  3. #3
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    int($a) ist die Lösung.

  4. #4
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    PS: abs() liefert den absoluten Wert zurück, d.h. 1 bei (-1).
    PPS: Das ist z.B. einer der Gründe warum mir Perl nicht passt
    Hä? Perl passt dir nicht, weil abs() den Absolutwert einer Zahl liefert? Hab ich das jetzt richtig verstanden?
    Was hättest Du denn von abs() erwartet? Oder anders, in welcher Sprache liefert abs() immer eine Ganzzahl?

    Oder hab ich was falsch verstanden?

    Gruß, Michael

  5. #5
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    Gesucht war wohl eine Funktion zum Abrunden, benutzt wurde aber fälschlicherweise die Funktion zum positiven Grundwert (Absolutwert).

    Zumindest habe ich es so gedeutet.

  6. #6
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    80
    Ach so, abs(x) ist also "Betrag von x"?

    Wieder was dazu gelernt!

    danke,
    Ben

  7. #7
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    im Zweifelsfall hilft immer ein
    Code:
    perldoc -f abs

  8. #8
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    80
    Eine Frage hätte ich noch.

    Ich möchte Sekunden in Minuten und Sekunden umrechnen.
    Ich teile die Sekunden durch 60 und wende int(x) an, dann habe ich die Minuten.
    Ich berechne Sekunden modulo 60 und habe die Sekunden.

    Das Problem ist: 5:06 wird dann als 5:6 dargestellt.
    Kann man irgendwie sagen, dass Perl bei einstelligen Sekunden immer eine Null vorwegstellen soll?

    Danke,
    Ben

  9. #9
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    Code:
    $var = sprintf("%02d",$var);
    macht aus $var = 2: 02
    macht aus $var = 23: 23

    sprintf() liefert den formatierten Wert als L-Value zurück.
    printf() hingegen gibt den formatierten Wert auf STDOUT aus.

  10. #10
    Registrierter Benutzer
    Registriert seit
    28.05.2003
    Beiträge
    80
    Genau das ist es, ich danke Dir!

    Ben

  11. #11
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    Ersatzweise geht auch noch:

    if ($sek < 10) { $sek = "0$sek"; }

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •