Schrift
[thread]6587[/thread]

runden in Perl

Leser: 17


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
Gast Gast
 2004-12-20 16:15
#50196 #50196
Hallo,

Ich möchte reele Zahen auf ganze Zahlen runden.
Allerdigs kann ich nur Standardmodule benutzen.

Weiß wer weiter?

Gruß

tronde
Relais
 2004-12-20 16:20
#50197 #50197
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
wie möchtest Du denn runden?

Perl hat die int-Funkion, zum kaufmännischen Runden vorher einfach noch 0.5 addieren.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Tronde
 2004-12-20 16:27
#50198 #50198
User since
2003-11-13
10 Artikel
BenutzerIn
[default_avatar]
Danke.

Genau das wollte ich wissen
Ishka
 2004-12-20 16:28
#50199 #50199
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
das mit 0.5 addieren hat Probleme, wenn man auch mit negativen Zahlen hantiert:

perl -le 'print int (-2.1+0.5)'
-1

hab vergessen, wie das Modul heißt, mit dem man besser runden kann.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
Relais
 2004-12-20 17:05
#50200 #50200
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Ishka,20.12.2004, 15:28]hab vergessen, wie das Modul heißt, mit dem man besser runden kann.[/quote]
POSIX in der Standard-Distro. Funktionen ceil() und floor() ... Aber ob das das genannte Problem beseitigt?
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Taulmarill
 2004-12-20 17:32
#50201 #50201
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
wie wärs hier mit?
Code: (dl )
1
2
3
4
5
6
use strict;
use warnings;
for ( my $foo = -2; $foo <= 2; $foo += 0.2 ) {
my $bar = int( $foo < 0 ? $foo - 0.5 : $foo + 0.5 );
print "$foo = $bar\n";
}
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
ptk
 2004-12-20 18:06
#50202 #50202
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
dominicn
 2004-12-21 00:03
#50203 #50203
User since
2003-08-08
327 Artikel
BenutzerIn
[default_avatar]
wie wärs mit
Code: (dl )
$gerundet = sprintf("%.0f", $zahl);


habe grad festgestellt, dass er 0.5 auf 0 abrundet, aber 0.5000000001 wird auf 1 aufgerundet. ansonsten funktioniert es aber, auch bei negativen zahlen. optimal ists aber nicht (-0.3 gerundet gibt -0 zurück)
root
 2004-12-22 12:28
#50204 #50204
User since
2003-08-15
120 Artikel
BenutzerIn
[default_avatar]
Von einer "schwarzen Null" hab ich öfter schon in der Zeitung gelesen, aber eine -0??? Ist das dann die "rote Null"?

kann man nicht
einfach quadrieren und dann die wurzel draus machen und dann einfach
Code: (dl )
1
2
3
4
5
6
7
sub runden{
my ($zahl, $stellen)=@_;
$zahl = wurzel($zahl hoch 2);
$stellen = 0 unless($stellen);
my $multiplikator = 10 hoch $stellen; # weiß die syntax nicht
return int($zahl*$multiplikator+0.5)/$multiplikator;
}

irgendwie so? $stellen sind die stellen auf die gerundet werden sollen.\n\n

<!--EDIT|root|1103711834-->
root
 2004-12-22 12:36
#50205 #50205
User since
2003-08-15
120 Artikel
BenutzerIn
[default_avatar]
Das hab ich noch bei mir gefunden für dicke fette Euros :-)
Code: (dl )
1
2
3
4
5
6
7
8
sub float2money{
my $zahl =$_[0];
return "0,00" if $zahl ==0;
$zahl = int($zahl*100+0.5);
$zahl =~ m/(\d)(\d)$/;
$zahl = int($zahl/100);
return $zahl.",".$1.$2;
}
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2004-12-20 16:15.