Schrift
[thread]5732[/thread]

runden von zahlen

Leser: 2


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
[HR]Doomrunner
 2003-09-17 17:55
#53216 #53216
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Hi,

ich müsste mal eben kurz wissen, wie ich mit Perl Zahlen runden kann. Dabei geht es nicht um nachkommastellen.

Beispiel:
51 = 50
52 = 50
53 = 55
54 = 55
55 = 55
56 = 55
57 = 55
58 = 60
59 = 60
60 = 60
61 = 60

also 5er Stellen runden. Ist das möglich, oder muss ich den Zahlenstring zerschnippeln und dann mit ganz vielen if-abfragen selber runden?

thx
SirLant
 2003-09-17 17:59
#53217 #53217
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
$zahl = 50 if $zahl < 55;
$zahl = 60 if $zahl >=55;

Das Schema musst du jetzt nur noch verallgemeinern, so kannst
du die Ziffern ab der zweiten Ziffer von links mit einem RegExp aus
der Zahl filtern und diese dann um eine 5 als letzte Stelle ergänzen
und daraus deinen Vergleich so wie oben bilden.\n\n

<!--EDIT|SirLant|1063807266-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
[HR]Doomrunner
 2003-09-17 18:00
#53218 #53218
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
ja, so habe ich mir das auch schon gedacht. Ist nur ein wenig blöd, da ich das von 0 bis 80 machen muss. Packe das aber einfach in eine Schleife.

Danke dir für die schnelle Antwort
SirLant
 2003-09-17 18:01
#53219 #53219
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Lies nocheinmal habe editiert!
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
[HR]Doomrunner
 2003-09-17 18:08
#53220 #53220
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Habe das jetzt so gelöst:

Code (perl): (dl )
1
2
3
4
5
for($i=-2;$i<=80;$i+=5) {
                my $a = $i+2;
                my $b = $i+4;
                if($restnutzung >= $i && $restnutzung <= $b) { $restnutzung = $a; }
        }
havi
 2003-09-17 19:14
#53221 #53221
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Funzt auch mit ganz einfachen Mitteln...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use warnings;
use strict;

my $zahl = 16;

if (substr($zahl,1,1) >= 5) {
substr($zahl,0,1) += 1;
}

substr($zahl,1,1) = 0;

print $zahl;

1;


Gruss\n\n

<!--EDIT|havi|1063811666-->
Dubu
 2003-09-17 19:34
#53222 #53222
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
@havi: Das entspricht nicht dem gewuenschten Ergebnis, denn du rundest auf 10er statt auf 5er (52 => 50, 53 => 55, 57 => 55, 58 => 60).

Und statt substr($zahl,1,1) nimm lieber substr($zahl,-1,1), damit es auch mit Zahlen klappt, die drei oder mehr Stellen haben.

@Doomrunner: Noch 'ne Moeglichkeit:
Code: (dl )
1
2
3
4
5
6
my $rest = $zahl % 5;
if ($rest < 3) {
   $zahl -= $rest;
} else {
   $zahl += (5-$rest);
}
[HR]Doomrunner
 2003-09-17 19:38
#53223 #53223
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
danke jungs.

Ich wusste doch wieso ich hier gepostet habe ;-)

werde wohl die variante von dubu nehmen.
havi
 2003-09-17 20:38
#53224 #53224
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
[quote=Dubu,17.09.2003, 17:34]@havi: Das entspricht nicht dem gewuenschten Ergebnis, denn du rundest auf 10er statt auf 5er (52 => 50, 53 => 55, 57 => 55, 58 => 60).

Und statt substr($zahl,1,1) nimm lieber substr($zahl,-1,1), damit es auch mit Zahlen klappt, die drei oder mehr Stellen haben.

@Doomrunner: Noch 'ne Moeglichkeit:
Code: (dl )
1
2
3
4
5
6
my $rest = $zahl % 5;
if ($rest < 3) {
   $zahl -= $rest;
} else {
   $zahl += (5-$rest);
}
[/quote]
Da hab ich wohl nicht ordentlich gelesen!

... mit dem substr hast du natürliich vollkommen recht!

Ist aber sowieso eine schlecht Variante!

Gruss
[HR]Doomrunner
 2003-09-18 14:00
#53225 #53225
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Dubus code arbeitet hervorragend. Habe da mal ne allgemeine Subroutine draus gemacht, in der man einmal den Wert, und dann die genauigkeit angeben kann.

Musste nämlich später auch nochmal auf 5.000er runden.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$endwert = &runden($ertragswert3,"5000");

sub runden {
        my $aufrundenab = $_[1] / 2;
        my $zahl = $_[0];
        
        my $rest = $zahl % $_[1];
        if ($rest < $aufrundenab) {
                $zahl -= $rest;
        } else { 
                $zahl += ($_[1] - $rest);
        }
        return($zahl);
}


Vielleicht kanns ja noch der ein oder andere gebrauchen.
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2003-09-17 17:55.