Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]9206[/thread]

regex gesucht zum Splitten von Zahlen

Leser: 1


<< >> 9 Einträge, 1 Seite
Gast Gast
 2007-07-18 23:33
#78638 #78638
Hallo,
kann mir bitte geholfen werden? Ich möchte Preise nach Euro und Cent splitten, habe aber nur eine zusammenhängende zahl.

2599 ist eigentlich 25,99
158989 wäre 1589,89

Wie drücke ich sowas am besten in regex aus? Mit substr komme nicht weiter, weil der "eurobereich" ja in de länge variabel ist.
"Splitte den Wert an den letzen beiden Zeichen" wäre schön aber (split /..$/,$wert) liefert nicht das gewünschte Ergebnis. (ist ja in diesem Kontex kein Suchmuster, oder?)
ptk
 2007-07-18 23:39
#78639 #78639
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Guest,18.07.2007, 21:33]Mit substr komme nicht weiter, weil der "eurobereich" ja in de länge variabel ist.[/quote]
Wieso nicht?
Code: (dl )
1
2
warn "$_ -> ". substr($_, 0, length($_)-2) . "," . substr($_, length($_)-2)
for (2599, 158989);

Am lesbarsten dürfte ein Regexp sein:
Code: (dl )
1
2
3
4
for (2599, 158989) {
my($euro,$cent) = $_ =~ m{^(\d*)(\d{2})$};
print "$_ -> $euro,$cent\n";
}
Relais
 2007-07-19 00:24
#78640 #78640
User since
2003-08-06
2257 Artikel
ModeratorIn
[Homepage] [default_avatar]
geht es wirklich um das Splitten, oder nur um das Darstellen?
Im zwoten Fall tun es
Code: (dl )
/100
und falls dann noch nötig ein printf.
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop 12. bis 14. Mai 2025 in München.

Winter is Coming
Crian
 2007-07-19 14:05
#78641 #78641
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Was passiert, wenn die Beträge im einstelligen Centbereich liegen? steht dann da 5 oder 005?

Wenns nur um die Ausgabe geht, wie Relais schon schrieb

Code: (dl )
printf "%.2f", $zahl/100;
\n\n

<!--EDIT|Crian|1184839626-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
jubei
 2007-07-19 14:09
#78642 #78642
User since
2007-07-19
22 Artikel
BenutzerIn
[default_avatar]
mit split und lookahead

Code: (dl )
($e, $c) = split(/(?=\d{2}$)/, 2599);
Crian
 2007-07-19 16:22
#78643 #78643
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Macht genau was bei 5 Cent?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Relais
 2007-07-19 16:36
#78644 #78644
User since
2003-08-06
2257 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Crian,19.07.2007, 14:22]Macht genau was bei 5 Cent?[/quote]
Tja, das macht dann 5 Euro. Zahlbar in 14 Tagen...
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop 12. bis 14. Mai 2025 in München.

Winter is Coming
renee
 2007-07-19 17:19
#78645 #78645
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Meine Kontonummer hast Du ja ;)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2007-07-19 17:21
#78646 #78646
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Selbst wenns nicht ums Lesen ginge finde ich

Code: (dl )
1
2
3
4
5
my $betrag = 23406;
my $euro = $betrag / 100;
my $cent = $betrag % 100;

printf "macht dann genau %d,%02d EUR\n", $euro, $cent;


hübscher, eingängiger und verständlicher als das mit regulären Ausdrücken zu machen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 9 Einträge, 1 Seite



View all threads created 2007-07-18 23:33.