Leser: 22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
1 2 3 4 5 6 7
print "wird zu: " . mach_deutsch (123456789.01); sub mach_deutsch { local $_ = reverse sprintf "%.*f",2,shift; s/(\d{3})(?=\d)(?!\d*\.)/$1,/g; tr/.,/,./; return scalar reverse $_; }
2010-01-20T12:17:28 biancaTausendertrennpunkte in Perl per printf?
Da hätte ich auch Interesse dran als großer Fan des Runden's :))
Ich baue die in meiner Rundungs-Routine so ein:
Quote"These functions aren't aware of such niceties as thousands separation and so on."
2010-01-20T12:33:13 GH@NDIAllerdings müsste trotzdem aus dem Punkt ein Koma werden, was es nicht wird.
1 2 3 4 5
my $z=129464248985476.5; $z=sprintf("%f",$z); $z=~tr/./,/; $z=~s/(?<=\d)(?=(?:\d{3})+,/./g; print "$z\n";
2010-01-20T12:04:28 GH@NDIIdeen?
1 2 3 4 5 6 7 8
#!/usr/bin/env perl use strict; use warnings; use locale; use POSIX qw(setlocale LC_ALL); setlocale(LC_ALL, "de_DE.utf8"); printf "%f\n", 1234.12;
2010-01-20T13:22:39 sid burnDu musst die locale vorher mit "setlocale" setzen. Schaue noch im POSIX Modul nach "setlocale" oder nach "localeconv" etc.
1 2 3 4 5 6 7 8
use Number::Format; my $fmt = Number::Format->new( THOUSANDS_SEP => q{.}, DECIMAL_POINT => q{,}, ); print $fmt->format_number(1234.12, 2, 1), "\n";
2010-01-20T13:36:59 sid burnWieso eigene ausgaberoutine?
Quoteweil man ja oft noch mehr Sonderwünsche hat, z.B. wenn man im Währungsbereich Integer rechnet um Floatrundungen zu vermeiden kann man Rundung und Kommasetzung entsprechend abfackeln.
QuoteIch wage die Prognose dass selberschreiben schneller geht als entsprechende CPAN Module zu suchen, doc zu lesen, zu testen und anzupassen...
Quotedu hast ja gerade auch erst rumgesucht oder?
2010-01-20T14:08:06 topegOh, kannte ich noch nicht.
Ich muss mich wirklich mehr mit den Kernmodulen beschäftigen...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sub format_amount {
my $amt = shift;
my $cent = (split /\D/, $amt)[-1];
defined $cent and $amt =~ /\D/
? do {
$amt =~ s/($cent)$//;
length $cent < 2 && ($cent .= '0');
}
: ($cent = '00');
$amt =~ s/\D//g;
$amt .= ".$cent";
$config{'currency'} == 0 # Dollar notation
? ($amt =~ s/(\d{1,3})(?=(?:\d{3}))/$1\,/g)
: do {
$amt =~ s/(\d{1,3})(?=(?:\d{3}))/$1\./g;
$amt =~ s/(\.(\d{2}))$/\,$2/;
};
return $amt;
}