Hier wird ein Wert aus dem Template #BasketSubTotal_Value (Variable) gelesen.
Dieser Wert wird mit 16 multipliziert und dann durch 100 geteilt.
Das Ergebnis wird dann in die Variable #wert gespeichert.
Dieser Code funktioniert.
Nun habe ich folgendes Problem:
Es erscheint als Ergebnis: 87.584. Ich möchte dies auf 2 Stellen nach dem Komma beschränken, mit auf- oder abrunden.
Auch sollte aus dem . lieber ein , erstellt werden.
Ich bin noch Newbie und vielleicht kann mir einer da Tips geben. Ich wäre sehr dankbar…
my($BasketSubTotal) = GetTLE("#BasketSubTotal\_Value");
my($mwst) = ($BasketSubTotal \* 16/100);
my ($mwst) =~s/\./,/g; #ersetze . mit ,
my ($mwst) =~m/(.\*?,.{2}).\*/g; #kürze
my ($mwst) = $1; #lese suchergebnis aus dem reg. Ausdruck
#wenn in einem reg. Ausdr. Teile geklammert sind, werden diese von links nach rechts den variablen $1, $2 usw. zugewiesen
my($mywert) = GetTLE("#wert");
SaveTLE("#wert","$mwst");
SetTLE("#wert",$mwst);
BUG:my ($mwst) =~s/./,/g; #ersetze . mit ,
BUG:my ($mwst) =~m/(.*?,.{2}).*/g; #kürze
BUG:my ($mwst) = $1; #lese suchergebnis aus dem reg. Ausdruck
#wenn in einem reg. Ausdr. Teile geklammert sind, werden diese
von links nach rechts den variablen $1, $2 usw. zugewiesen
Die Variable $mwst wird in jeder Zeile durch das wiederholte
Aufrufen mit my aufs neue deklariert und somit der alte
Wert aus den Vorzeilen gelöscht!
Davor warnt Perl automatisch, wenn das Skript mit dem
Warnschalter -w und mit use strict aufgerufen wird.
Das bewahrt vor dem Grossteil von Syntaxfehlern und
sollte bei jedem noch so kleinen Skript verwendet werden.
Weiter ist für Warenkörbe normalerweise das Runden und
nicht das Abschneiden von Nachkommastellen gefragt. Der
folgende Code behebt diese Problemchen:
#!/usr/bin/perl -w -- Perl im Warnmodus
use strict; #der strenge Freund
#my($BasketSubTotal) = GetTLE("#BasketSubTotal\_Value");
# Zeile für Testlauf geändert zu
my $BasketSubTotal = 192.54;
my $mwst = ($BasketSubTotal \* 16/100);
# sprintf rundet die Zahl durch die Formatanweisung %.2f
my $mwst\_formatiert = sprintf("%.2f",$mwst);
# Punkt in Dezimalkomma umwandeln
$mwst\_formatiert =~ s/\./,/;
print "$BasketSubTotal mit $mwst Mwst -\> $mwst\_formatiert\n";
> > my($BasketSubTotal) = GetTLE("#BasketSubTotal\_Value");
> > my($mwst) = ($BasketSubTotal \* 16/100);
>
> BUG:my ($mwst) =~s/\./,/g; #ersetze . mit ,
> BUG:my ($mwst) =~m/(.\*?,.{2}).\*/g; #kürze
> BUG:my ($mwst) = $1; #lese suchergebnis aus dem reg. Ausdruck
>
> > #wenn in einem reg. Ausdr. Teile geklammert sind, werden diese
> > von links nach rechts den variablen $1, $2 usw. zugewiesen
Die Variable $mwst wird in jeder Zeile durch das wiederholte
Aufrufen mit my aufs neue deklariert und somit der alte
Wert aus den Vorzeilen gelöscht!
schlägtsichdiehandandiestirn
Davor warnt Perl automatisch, wenn das Skript mit dem
Warnschalter -w und mit use strict aufgerufen wird.
Das bewahrt vor dem Grossteil von Syntaxfehlern und
sollte bei jedem noch so kleinen Skript verwendet werden.
Weiter ist für Warenkörbe normalerweise das Runden und
nicht das Abschneiden von Nachkommastellen gefragt. Der
folgende Code behebt diese Problemchen:
> #!/usr/bin/perl -w -- Perl im Warnmodus
> use strict; #der strenge Freund
>
> #my($BasketSubTotal) = GetTLE("#BasketSubTotal\_Value");
> # Zeile für Testlauf geändert zu
> my $BasketSubTotal = 192.54;
>
> my $mwst = ($BasketSubTotal \* 16/100);
>
> # sprintf rundet die Zahl durch die Formatanweisung %.2f
> my $mwst\_formatiert = sprintf("%.2f",$mwst);
> # Punkt in Dezimalkomma umwandeln
> $mwst\_formatiert =~ s/\./,/;
> print "$BasketSubTotal mit $mwst Mwst -\>
> $mwst\_formatiert\n";
Das ist natürlich eleganter (und auch korrekter), aber streng genommen gegen die Fragestellung