Hallo Frank!
sprintf wäre hier die richtige Funktion! Mit ihr wird halt ein entsprechender Skalar erzeugt, der
dann auch weiterverarbeitet werden kann ...
$rund = sprintf("%.$nachkommastellen", $krumm);
Hier erstmal ein kurzer Fehlerhinweis: leider habe ich das "f" für Fließkommazahlen vergessen:
$rund = sprintf("%.${nachkommastellen}f", $krumm);
Was ist, wenn ich mehrere so gerundete Zahlen erzeuge? Wird dann eine Liste zurückgegeben?
Ich verstehe Dein "wenn" leider nicht so ganz (eindeutig) ...
sprintf erzeugt einen einzigen String! Der erste Parameter gibt dabei das Format bzw. die Vorlage
für den String an ("Die bestellten %d Stück kosten %.2f DM"). Dort können mehrere Platzhalter enthalten
sein. Die folgenden Parameter geben dann die Werte an, die für die Platzhalter eingesetzt werden
sollen. Hier also $stueck und $preis ...
sprintf ("Die bestellten %d Stück kosten %.2f DM", $stueck, $einzelpreis * $stueck)
Mehrere Zahlen zur Rundung an sprintf zu Übergeben macht also so keinen Sinn.
Um auf diesem Wege mehrere Zahlen zu Runden, hast Du natürlich die Möglichkeit,
die Anweisung mehrfach hintereinander auzuführen:
$rund1 = sprintf("%.${nachkommastellen}f", $krumm1);
$rund2 = sprintf("%.${nachkommastellen}f", $krumm2);
$rund3 = sprintf("%.${nachkommastellen}f", $krumm3);
Oder aber du gehst von einer Liste aus (die auch spontan erzeugt werden kann) und wendest dann die sprintf Funktion auf jedes einzelne Element an:
@rund = ();
foreach $krumm (@krumm) {
my $rund = sprintf("%.${nachkommastellen}f", $krumm);
push( @rund, $rund );
}
Bzw.:
@rund = ();
foreach $krumm (@krumm) {
push( @rund, sprintf("%.${nachkommastellen}f", $krumm) );
}
Oder (langsam wird's grausig)
@rund = ();
for (@krumm) { push( @rund, sprintf("%.${nachkommastellen}f", $_) ); }
Am perligsten ist aber die Anwendung von MAP.
@rund = map {sprintf("%.${nachkommastellen}f", $_) } @krumm;
Gruß,
Jörk