Alex: Auf x-Stellen runden

Moin,

ich hab bestimmt wieder so ne Frage, die schon zig-mal gestellt wurde:
  Wie runde ich mit Perl auf x-Stellen (oder auf ganze Zahlen...)
Im Archiv hab ich auf Anhieb leider nichts gefunden! :(

Danke im Vorraus
-Alex

  1. Hi,

    ich hab bestimmt wieder so ne Frage, die schon zig-mal gestellt wurde:

    »»   Wie runde ich mit Perl auf x-Stellen (oder auf ganze Zahlen...)

    Im Archiv hab ich auf Anhieb leider nichts gefunden! :(

    Nur mal so ungestetet hingeschrieben..:

    sub Runden {
      my $wert = $_[0];
      my $helper = int($wert);

    if (($wert-$helper) >= 0.5) {
         $helper++;
      }
      return $helper;
    }

    Ciao,
    Wolfgang

    1. Hi,

      wo ich deinen Text nochmal lese, frag ich mich ob ich ihn
      falsch verstanden hab?
      Willst du Zahlen aufrunden/abrunden, oder nur auf x Kommastellen kuerzen?

      Bei letzterem musst du halt sowas in der Art einbauen:

      $gekuerzt = int($zahl*(10*$stellen))/(10*$stellen);

      Ciao,
      Wolfgang

      1. Hi,

        wo ich deinen Text nochmal lese, frag ich mich ob ich ihn
        falsch verstanden hab?
        Willst du Zahlen aufrunden/abrunden, oder nur auf x Kommastellen kuerzen?

        Bei letzterem musst du halt sowas in der Art einbauen:

        $gekuerzt = int($zahl*(10*$stellen))/(10*$stellen);

        Ciao,

        »»  Wolfgang

        auf x-Stellen RUNDEN, d.h. ich hab z.b.   7,4567
        die Ergebnis wuerden dann sein:

        7,457
        7,46
        7,5
        7

        Aber danke fuer die Tips, ich werd'S mal versuchen!

        -Alex

    2. Hallo!

      sub Runden {
        my $wert = $_[0];
        my $helper = int($wert);

      if (($wert-$helper) >= 0.5) {
           $helper++;
        }
        return $helper;
      }

      Dasselbe in kurz:  $rounded = int($wert + 0.5);
      Bin mir jetzt aber nicht sicher, ob das mit negativen Zahlen auch hinhaut.

      Zum Runden auf x Stellen: <http://www.activestate.com/ActivePerl/docs/lib/Pod/perlfaq4.html#does perl have a round() function what about ceil() and floor() trig functions>

      So lange

      1. Hi,

        Dasselbe in kurz:  $rounded = int($wert + 0.5);

        »

        Warum einfach, wenn es auch umstaendlich geht?
        Also ich finde mein Code sieht einfach mehr Sexy aus ;)

        Ciao,
          Wolfgang

    3. hi!

      ich hab bestimmt wieder so ne Frage, die schon zig-mal gestellt wurde:
      »»   Wie runde ich mit Perl auf x-Stellen (oder auf ganze Zahlen...)
      Im Archiv hab ich auf Anhieb leider nichts gefunden! :(

      Die Antwort auf dieses Problem steht in der Forumsauslese.
      <../../sfausles/tsfa_tef.htm#a1>

      bye, Frank!

      ps. Bitte Probleme, die in der Auslese behandelt werden, nur noch mit Links darauf beantworten.

      1. Hi,

        ps. Bitte Probleme, die in der Auslese behandelt werden, nur noch mit Links darauf beantworten.

        Warum?
        Sollen diejenigen, die schneller drin sind zu antworten und HELFEN wollen nun
        dadurch bestraft werden, indem sie die nichtgetanene Sucharbeit des Fragestellers nachholen sollen, nur
        um einen exakten Link zu bekommen?

        Wenn du einen pädagigischen Effekt anstreben willst, von wegen, das die
        Leute endlich lernen sollen, die FAQs/Auslesen/Artikel zu lesen, dann ist der doch
        sowieso schon durch die Fragestellung ad Akta.

        Aber gut. Vielleicht sollte man wie in den Newsgroups wohl nur noch
        in den EInheitsgesang einklingen und jeden niedermachen mit den Satz "Lies die FAQ!".

        Na dann gute Nacht Forum.

        Ciao,
          Wolfgang

      2. Hi Frank!

        ps. Bitte Probleme, die in der Auslese behandelt werden, nur noch mit Links darauf beantworten.

        Sorry, wusste nicht, dass das dort schon steht. Ok, ich geb's zu, ich hab die Auslese immer noch nicht auswendig gelernt. ;-)
        Hinweis: Zwei Beitraege drunter ist ein Fehler: CR hat den ASCII-Wert 13, nicht 15. 015 ist die oktale Darstellung davon.

        So lange

      3. Hallo Frank,

        »»   Wie runde ich mit Perl auf x-Stellen (oder auf ganze Zahlen...)

        Die Antwort auf dieses Problem steht in der Forumsauslese.
        <../../sfausles/tsfa_tef.htm#a1>

        Ich hab` mir unverschämterweise erlaubt <g>, die Vorschläge von Calocybe und Wolfgang zu einer kleinen Subroutine zusammenzufassen, die für negative wie positive Zahlen funktioniert, und auf beliebig viele Stellen rundet:

        sub Round ($ $) {
          return int($_[0] * 10**(defined $_[1] ? $_[1] : 0) + ($_[0] >= 0 ? +0.5 : -0.5)) / 10**(defined $_[1] ? $_[1] : 0);
        }

        Es tut mir allerdings leid, daß ich momentan total auf Einzeiler abfahre ;-)
        Ein wenig weniger kryptisch ;-) ist folgendes:

        sub Round ($ $) {
          my ($num, $len) = @_;
          $len = 0 unless defined $len;
          my $add = $num >= 0 ? +0.5 : -0.5;
          my $rounded = int($num * 10**$len + $add) / 10**$len;
          return $rounded;
        }

        Vielleicht ersetzt das ja mal die Version in der Auslese :-)

        Gruß AlexBausW

        P.S.: Das ganze ist ohne Gewähr, funktioniert aber zumindest bei mir ;-)