$betragRund = sprintf("%.2f", $betrag); bei CGI?
Thomas N
- perl
Hallo!
Schuster bleib bei deinen Sohlen, sagte man mal seiner Zeit...
Nun bei $betragRund kommt zwar eine Zahl mit zwei Kommastellen - wie gewollt - aber diese sind immer Null.
$betragRund = sprintf("%.2f", $betrag);
Als KonsolenScript funktioniert die Kürzung.
Benutze ich printf verrutscht in meiner HTML-Ausgabe eine Zahl links oben in die Ecke und mein
$betragRund ist einfach immer nur eins.
Übrigens, ich bin Programmieranfänger und eigentlich ziemlich stolz, dass ich mit diesen doofen Programmierbüchern
überhaupt soweit gekommen bin!
Guts Nächtle.
Thomas N
-----------------------------------------
use strict;
use CGI qw(:standard);
my($betrag, $wahl, $ergebnis, $eurokurs, $ergebnis, $betragRund, $ergebnisRund);
my $betrag = param('betrag');
$wahl = param('devisen');
$betragRund = sprintf("%.2f", $betrag);
$eurokurs = 1.95583;
#regulärer Ausdruck (,) wird durch (.) ersetzt.
$betrag =~ s/,/./;
if ($wahl == 1)
{
$ergebnis = $betragRund / $eurokurs;
#reduzieren der Nachkomma-Stellen auf zwei.
$ergebnisRund = sprintf("%.2f", $ergebnis);
print qq|
<HTML>
<HEAD>
<TITLE>15702_5</TITLE>
</HEAD>
<BODY><div align="center"><h1>Umrechnung:</h1>
<hr noshade size="1" width=200>
<table border="0" cellspacing="0" cellpadding="10" bgcolor="#EFEFEF">
<tr><td>$betragRund DM sind: <b>$ergebnisRund Euro</b></td></tr></table>
</div></BODY></HTML>
|;
}
elsif($wahl == 2)
{
$ergebnis = $betrag * $eurokurs;
$ergebnisRund = sprintf("%.2f", $ergebnis);
print qq|
<HTML>
<HEAD>
<TITLE>15702_5</TITLE>
</HEAD>
<BODY><div align="center"><h1>Umrechnung:</h1>
<hr noshade size="1" width=200>
<table border="0" cellspacing="0" cellpadding="10" bgcolor="#EFEFEF">
<tr><td>$betragRund Euro sind: <b>$ergebnisRund DM</b></td></tr></table>
</div></BODY></HTML>
|;
}
else
{
print header;
print start_html('Error');
print h1('Die Wahlmoeglichkeit existiert nicht, bitte wälen Sie eine Umrechnungsart aus!');
print end_html;
}
Hi,
Nun bei $betragRund kommt zwar eine Zahl mit zwei
Kommastellen - wie gewollt - aber diese sind immer
Null.
$betragRund = sprintf("%.2f", $betrag);
nicht das Runden geht bei Dir schief, sondern m. E.
schon die Berechnung von $betrag:
$ergebnis = $betragRund / $eurokurs;
Laß Dir mal ausgeben, was an dieser Stelle in $ergebnis
steht.
Als KonsolenScript funktioniert die Kürzung.
Das glaube ich nicht.
Viele Grüße
<img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael
Hi,
Nun bei $betragRund kommt zwar eine Zahl mit zwei
Kommastellen - wie gewollt - aber diese sind immer
Null.
$betragRund = sprintf("%.2f", $betrag);
nicht das Runden geht bei Dir schief, sondern m. E.
schon die Berechnung von $betrag:
$ergebnis = $betragRund / $eurokurs;
Laß Dir mal ausgeben, was an dieser Stelle in $ergebnis
steht.
Als KonsolenScript funktioniert die Kürzung.
Das glaube ich nicht.
Also hier das KonsolenScript, bei mir funktionierts - mal abgesehen, dass ich $betrag = ? habe, wenn ich über <stdin> nichts eingebe, was meinst Du?:
Viele Grüße
Thomas N
__________________________________________________________________
#!/usr/bin/perl -w
use strict;
my($betrag, $wahl, $eurokurs, $ergebnis, $betragR, $ergebnisRund);
$eurokurs = 1.95583;
print "Geben Sie den umzurechnenden Betrag ein:\n";
$betrag = <stdin>;
chomp($betrag);
$betrag =~ s/,/./;
$betragR = sprintf("%.2f", $betrag);
print "DM <=> Euro (1)?\n";
print "Euro <=> DM (2)?\n";
print "Ihre Wahl? :\n";
$wahl = <stdin>;
chomp($wahl);
if ($wahl == 1)
{
$ergebnis = $betragR / $eurokurs;
$ergebnisRund = sprintf("%.2f", $ergebnis);
print $betragR;
print " DM sind ";
print $ergebnisRund;
print " Euro\n";
}
elsif ($wahl == 2)
{
$ergebnis = $betragR * $eurokurs;
$ergebnisRund = sprintf("%.2f", $ergebnis);
print $betragR, " Euro sind ", $ergebnisRund, " DM.\n";
}
else
{
print "Die Wahlmoeglichkeit '", $wahl, "' existiert nicht!\n";
}
Hallo,
my $betrag = param('betrag');
$betragRund = sprintf("%.2f", $betrag);
$betrag =~ s/,/./;
Findest Du nicht, daß diese Subtsitution etwas spät erfolgt?
Grüße
Klaus
Hallo,
my $betrag = param('betrag');
$betragRund = sprintf("%.2f", $betrag);
$betrag =~ s/,/./;
Findest Du nicht, daß diese Subtsitution etwas spät erfolgt?
Ja, aber nur etwas, oder? ;-)
Danke
Thomas N
Hi,
Findest Du nicht, daß diese Subtsitution etwas spät erfolgt?
Ja, aber nur etwas, oder? ;-)
you made my day :-)
Cheatah
Hi,
$betragRund = sprintf("%.2f", $betrag);
Benutze ich printf verrutscht in meiner HTML-Ausgabe eine Zahl links oben in die Ecke und mein
$betragRund ist einfach immer nur eins.
printf macht eine Ausgabe und gibt, wie jede geglückte Aktion, einen wahren Wert zurück, also 1. Genauso wird nach "my $temp = print 'bla';" in $temp der Wert 1 stehen.
use strict;
use CGI qw(:standard);
Sehr schön!
my($betrag, [...]
my $betrag [...]
Das hingegen ist etwas zu viel des Guten :-) Bitte nur ein 'my' pro Variable und Scope.
my $betrag = param('betrag');
Übrigens ist $betrag undef, wenn kein entsprechender Parameter an das CGI-Script übergeben wurde. Besser wäre in solchen Fällen:
my $betrag = param('betrag') || 0;
$wahl = param('devisen');
Noch'n übrigens: Du kannst auch mehrere Variablen gleichzeitig deklarieren und füllen, inklusive Defaultwerte:
my ($betrag, $wahl, $eurokurs) = (param('betrag')||0, param('devisen')||1, 1.95583);
Cheatah
Hi,
my $betrag = param('betrag');
Übrigens ist $betrag undef, wenn kein entsprechender Parameter an das CGI-Script übergeben wurde. Besser wäre in solchen Fällen:
my $betrag = param('betrag') || 0;
Ja, das funktioniert, an das Problem hat ich noch nicht dran gedacht!
Aber wie mach ich das bei meiner Konsolenversion?
print "Geben Sie den umzurechnenden Betrag ein:\n";
$betrag = <stdin> || 0;
chomp($betrag)
$betragR =~ s/,/./;
So funktioniert es dort nicht!
Wenn ich nichts eingebe sagt mir die Konsole:
Argument "" isn't numeric in sprintf at 15702_4.pl line 19, <stdin> line 1.
Auch so gehts nicht - mal davon abgesehen, dass es sicher nicht elegant ist.
$betrag = 0;
$betrag = <stdin>;
chomp($betrag)
$betragR =~ s/,/./;
Aber sollte nicht $betrag gleich Null sein, wenn ich nichts über <stdin> eingebe? Was passiert mit $betrag, wenn ich über <stdin> nichts eingebe?
Thomas N
Hi,
$betrag = <stdin> || 0;
nein, von STDIN kommt ja mit Sicherheit was, und wenn es nur ein Enter ist. Nach
chomp($betrag)
kannst Du dann mittels
$betrag ||= 0;
obige Aktion nachholen.
So funktioniert es dort nicht!
Und die Fehlerbeschreibung ist...? ;-)
$betrag = 0;
$betrag = <stdin>;
Nützt nichts; $betrag wird ja durch STDIN komplett überschrieben. Wenn dort undef rauskommen _könnte_, wäre es das in jedem Fall, egal ob Du die Variable initialisierst oder nicht.
Aber sollte nicht $betrag gleich Null sein, wenn ich nichts über <stdin> eingebe?
Nein, sondern "\n", oder was immer lokal der Zeilenumbruch ist. Übrigens: Handler schreibt man groß, so auch STDIN.
Cheatah
Hi,
$betrag = <stdin> || 0;
nein, von STDIN kommt ja mit Sicherheit was, und wenn es nur ein Enter ist.
Ja klar, ENTER!
Nach chomp($betrag) kannst Du dann mittels
$betrag ||= 0;
obige Aktion nachholen.
Funktioniert prima!.
Aber wie soll ich das verstehen?
Mit dem logischen Operator (oder) frage ich eine Bedingung ab, doch hier seh ich gar keine "Bedingungvoraussetzung" ($betrag oder =0) gibt doch gar keinen Sinn?
Und wie kommt die Zuweisung (0) für $betrag zustande?
$betrag ist z.B. "\n" (weil ich nur enter gedrückt habe), wie kommt jetzt $betrag dazu den Wert Null anzunehmen?
Anders, gebe ich für $betrag einen Wert ein (77), wie kommt es, dass dieser nicht mit Null überschrieben wird?
Übrigens: Handler schreibt man groß, so auch STDIN.
Übrigens: Handler schreibt man mit ä, wie den Krämer! ;-)
Wo find ich in selfhtml etwas über die Schreibweise von Handles, bis jetzt hab ich dort nichts gefunden.
Thomas N
$betrag ||= 0;
obige Aktion nachholen.
Funktioniert prima!.
Aber wie soll ich das verstehen?
Mit dem logischen Operator (oder) frage ich eine Bedingung ab, doch hier seh ich gar keine "Bedingungvoraussetzung" ($betrag oder =0) gibt doch gar keinen Sinn?
Du solltest Dich einmal mit dem entsprechenden Kapitel aus der Perl-Dokumentation beschäftigen (perldoc perlop).
Und wie kommt die Zuweisung (0) für $betrag zustande?
$betrag ist z.B. "\n" (weil ich nur enter gedrückt habe), wie kommt jetzt $betrag dazu den Wert Null anzunehmen?
TRUE ist bei Perl alles was nicht undefined, 0, oder ein leerer String ist (*wennichnurnochwüßtewodaswiedersteht*). Wenn also ein Ausdruck (hier $betrag) TRUE ist, dann passiert nichts, ansonsten die Zuweisung von 0.
Anders, gebe ich für $betrag einen Wert ein (77), wie kommt es, dass dieser nicht mit Null überschrieben wird?
77 ist bei einer Bedingung einfach nur TRUE.
Wo find ich in selfhtml etwas über die Schreibweise von Handles, bis jetzt hab ich dort nichts gefunden.
Nicht alles wird in selfhtml abgehandelt. Dafür gibt es auch eine ziemlich umfangreiche Produktdokumentation[1]:
perldoc perlstyle
Grüße
Klaus
[1] Die Standard-HTML-Doku von Activeperl umfaßt derzeit ca. 11 MByte.
Hi,
Mit dem logischen Operator (oder) frage ich eine Bedingung ab, doch hier seh ich gar keine "Bedingungvoraussetzung" ($betrag oder =0) gibt doch gar keinen Sinn?
Du solltest Dich einmal mit dem entsprechenden Kapitel aus der Perl-Dokumentation beschäftigen (perldoc perlop).
stimmt auffällig - und in der Zwischenzeit vielleicht auch mal überlegen, wie man "$x += 3;" noch schreiben könnte ;-)
TRUE ist bei Perl alles was nicht undefined, 0, oder ein leerer String ist (*wennichnurnochwüßtewodaswiedersteht*).
perldoc perldata
Anders, gebe ich für $betrag einen Wert ein (77), wie kommt es, dass dieser nicht mit Null überschrieben wird?
77 ist bei einer Bedingung einfach nur TRUE.
Anders gesagt: perldoc perlop ;-)
Nicht alles wird in selfhtml abgehandelt. Dafür gibt es auch eine ziemlich umfangreiche Produktdokumentation[1]:
...Mit der man sich eingehend beschäftigen sollte. SelfHTML ist auch "nur" Sekundärliteratur und kann daher mit einer Dokumentation keinesfalls konkurrieren. Man kann damit Grundlagen erlernen, Tipps bekommen, Praxisbeispiele finden (zusätzlich zu denen in der Doku) usw., aber SelfHTML oder ein anderes Werk, egal wie gut es sein mag, ersetzt _niemals_ den Blick in die Doku.
perldoc perlstyle
Fangen wir einfach mal klein an:
perldoc perl
perldoc perldoc
perldoc perlfaq (hier immer mal nach den eigenen Problemen suchen!)
perldoc perlstyle
perldoc CGI
und natürlich:
perldoc strict
perldoc perlrun (-w)
perldoc -f my
Außerdem sollte man http://www.cpan.org/ kennen :-)
Cheatah
Hi,
Anders gesagt: perldoc perlop ;-)
Nicht alles wird in selfhtml abgehandelt. Dafür gibt es auch eine ziemlich umfangreiche Produktdokumentation[1]: ...Mit der man sich eingehend beschäftigen sollte. SelfHTML ist auch "nur" Sekundärliteratur und kann daher mit einer Dokumentation keinesfalls konkurrieren. Man kann damit Grundlagen erlernen, Tipps bekommen, Praxisbeispiele finden (zusätzlich zu denen in der Doku) usw., aber SelfHTML oder ein anderes Werk, egal wie gut es sein mag, ersetzt niemals den Blick in die Doku. perldoc perlstyle Fangen wir einfach mal klein an: perldoc perl perldoc perldoc perldoc perlfaq (hier immer mal nach den eigenen Problemen suchen!) perldoc perlstyle perldoc CGI und natürlich: perldoc strict perldoc perlrun (-w) perldoc -f my Außerdem sollte man http://www.cpan.org/ kennen :-)
Also, bin ich hier erstmal richtig, siehe Auflistung unten?? Aber wo ist perldoc? Oder ist DAS perldoc?
For ease of access, the Perl manual has been split up into several sections:
perl Perl overview (this section) perlfaq Perl frequently asked questions perltoc Perl documentation table of contents perlbook Perl book information
perlsyn Perl syntax perldata Perl data structures perlop Perl operators and precedence perlsub Perl subroutines perlfunc Perl builtin functions perlreftut Perl references short introduction perldsc Perl data structures intro perlrequick Perl regular expressions quick start perlpod Perl plain old documentation perlstyle Perl style guide perltrap Perl traps for the unwary
perlrun Perl execution and options perldiag Perl diagnostic messages perllexwarn Perl warnings and their control perldebtut Perl debugging tutorial perldebug Perl debugging
perlvar Perl predefined variables perllol Perl data structures: arrays of arrays perlopentut Perl open() tutorial perlretut Perl regular expressions tutorial
perlre Perl regular expressions, the rest of the story perlref Perl references, the rest of the story
perlform Perl formats
perlboot Perl OO tutorial for beginners perltoot Perl OO tutorial, part 1 perltootc Perl OO tutorial, part 2 perlobj Perl objects perlbot Perl OO tricks and examples perltie Perl objects hidden behind simple variables
perlipc Perl interprocess communication perlfork Perl fork() information perlnumber Perl number semantics perlthrtut Perl threads tutorial
perlport Perl portability guide perllocale Perl locale support perlunicode Perl unicode support perlebcdic Considerations for running Perl on EBCDIC platforms
perlsec Perl security
perlmod Perl modules: how they work perlmodlib Perl modules: how to write and use perlmodinstall Perl modules: how to install from CPAN perlnewmod Perl modules: preparing a new module for distribution
perlfaq1 General Questions About Perl perlfaq2 Obtaining and Learning about Perl perlfaq3 Programming Tools perlfaq4 Data Manipulation perlfaq5 Files and Formats perlfaq6 Regexes perlfaq7 Perl Language Issues perlfaq8 System Interaction perlfaq9 Networking
perlcompile Perl compiler suite intro
perlembed Perl ways to embed perl in your C or C++ application perldebguts Perl debugging guts and tips perlxstut Perl XS tutorial perlxs Perl XS application programming interface perlclib Internal replacements for standard C library functions perlguts Perl internal functions for those doing extensions perlcall Perl calling conventions from C perlutil utilities packaged with the Perl distribution perlfilter Perl source filters perldbmfilter Perl DBM filters perlapi Perl API listing (autogenerated) perlintern Perl internal functions (autogenerated) perlapio Perl internal IO abstraction interface perltodo Perl things to do perlhack Perl hackers guide
perlhist Perl history records perldelta Perl changes since previous version perl5005delta Perl changes in version 5.005 perl5004delta Perl changes in version 5.004
perlaix Perl notes for AIX perlamiga Perl notes for Amiga perlbs2000 Perl notes for POSIX-BC BS2000 perlcygwin Perl notes for Cygwin perldos Perl notes for DOS perlepoc Perl notes for EPOC perlhpux Perl notes for HP-UX perlmachten Perl notes for Power MachTen perlmacos Perl notes for Mac OS (Classic) perlmpeix Perl notes for MPE/iX perlos2 Perl notes for OS/2 perlos390 Perl notes for OS/390 perlsolaris Perl notes for Solaris perlvmesa Perl notes for VM/ESA perlvms Perl notes for VMS perlvos Perl notes for Stratus VOS perlwin32 Perl notes for Windows
Thomas N
Hallo,
Also, bin ich hier erstmal richtig, siehe Auflistung unten??
Aber wo ist perldoc? Oder ist DAS perldoc?
Ja, Du bist da sicher richtig, und ja, daß ist 'perldoc', zumindest der Grundlagenbereich. Nicht vergessen solltest Du die Dokumentationen der einzelnen Module, die Du mit
perldoc Modulname
erreichst, und in der BAsisdokumentation so nicht aufgeführt ist.
Alles zusammen findest Du i.d.R. auf Deiner Festplatte, da Du ja sicherlich auch lokal ein Perl installiert hast. Dazuz stehen Dir das Online-Angebot unter http://www.perldoc.com bzw. die Buchform (Programming Perl von O'Reilly) als Alternative zur Wahl.
Also, viel Spaß beim Schmökern;-)
Grüße
Klaus
Hallo,
Aber wo ist perldoc? Oder ist DAS perldoc?
die Buchform (Programming Perl von O'Reilly) als Alternative zur Wahl.
Das Buch werde ich sicher nicht kaufen!
Aber vielleicht (Programmieren mit Perl von Wall) ;-)
Also, viel Spaß beim Schmökern;-)
Danke.
Ich beisse mir nur in den Hintern, dass ich dieses teure blöde Buch (Perl Der Einstieg, Galileo Press) gekauft habe :-(
Perl für Dummies hab ich nach einem Tag zum Glück wieder zurück in den Buchladen getragen.
Und und und!
Also ich find es sehr schwierig, Programmieren zu lernen ob nun die eine oder die andere Sprache ist nach meiner Schnupperei (war erst 5 Tage in der VHS c++ lernen) egal, aber beides zusammen, also Programmieren und Sprache!? Ich schreibe mal ein richtig gutes AnfängerBuch zum Programmieren! Wo alles schön erklärt wird, so dass man dann frei seiner Kreativität den Lauf lassen kann... :-))
Grüße
Thomas N
Hi,
Also ich find es sehr schwierig, Programmieren zu
lernen ob nun die eine oder die andere Sprache ist
damit bist Du nicht allein.
Programmieren erfordert eine entsprechende Denkweise,
Sorgfalt, Mißtrauen und vieles Andere. Dazu einiges
an Grundlagenwissen, etwa über Algorithmen und Daten-strukturen - dieses Wissen ist nicht an die Syntax
einer konkreten Programmiersprache gebunden.
Ich schreibe mal ein richtig gutes AnfängerBuch zum
Programmieren! Wo alles schön erklärt wird, so dass
man dann frei seiner Kreativität den Lauf lassen
kann... :-))
Es gibt eine Reihe von Programmiersprachen, die mit dem
erklärten Ziel, den Leuten das Programmieren beizubrin-
gen, erfunden wurden. Niklaus Wirth ist besonders be-
kannt geworden für solche Sprachen (u. a. Pascal und
Modula), die sich durch die Klarheit ihrer Anweisungs-
struktur, die Lesbarkeit der Programme und die frühe
Erkennbarkeit von Fehlern auszeichnen. Auch Eiffel
hätte meine Sympathie, von seinem Ansatz her.
Leider bedingt dies, daß bestimmte Dinge nicht funk-
tionieren können - die Lernbarkeit einer Sprache wird
nicht dadurch höher, daß jede Zeichenkette "irgendwas"
bedeutet, sondern eben dadurch, daß viele Zeichenketten
"nichts Gültiges" bedeuten (dann kann man sich die-
jenigen, die "etwas Gültiges" bedeuten, nämlich leich-
ter merken, wenn sie einer entsprechenden Systematik
unterliegen).
In der "Industrie" haben sich solche Sprachen aber
aufgrund ihrer inhärenten Einschränkungen nicht durch-
gesetzt. Die gängigen Sprachen sind m. E. alle nicht
besonders geeignet, damit Programmieren zu lernen;
der Aufwand, erst mal eine Lehrsprache zu lernen und
danach eine "richtige", wird von vielen Neulingen aber
nicht eingesehen. Dabei wäre das in der Tat die effi-
zientere Methode, weil man im Lauf der Zeit so viele
Sprachen lernen muß, daß es sinnvoll ist, den Lern-
prozeß als solchen zu optimieren und nicht den kurz-
fristigen Erfolg bei der ersten Sprache.
Viele Grüße
<img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael