mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
UConv: use locale for decimal_mark
git-svn-id: https://svn.fhem.de/fhem/trunk@19614 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
49a532f70a
commit
7f0f508d2c
@ -20,22 +20,6 @@ use Time::Local;
|
|||||||
my $DEG = pi / 180.0;
|
my $DEG = pi / 180.0;
|
||||||
my $RAD = 180. / pi;
|
my $RAD = 180. / pi;
|
||||||
|
|
||||||
my %roman = (
|
|
||||||
1 => 'I',
|
|
||||||
5 => 'V',
|
|
||||||
10 => 'X',
|
|
||||||
50 => 'L',
|
|
||||||
100 => 'C',
|
|
||||||
500 => 'D',
|
|
||||||
1000 => 'M',
|
|
||||||
5000 => '(V)',
|
|
||||||
10000 => '(X)',
|
|
||||||
50000 => '(L)',
|
|
||||||
100000 => '(C)',
|
|
||||||
500000 => '(D)',
|
|
||||||
1000000 => '(M)',
|
|
||||||
);
|
|
||||||
|
|
||||||
sub GetSeason (;$$$);
|
sub GetSeason (;$$$);
|
||||||
sub _GetSeasonPheno ($$;$$);
|
sub _GetSeasonPheno ($$;$$);
|
||||||
sub _ReplaceStringByHashKey($$;$);
|
sub _ReplaceStringByHashKey($$;$);
|
||||||
@ -1066,6 +1050,22 @@ sub arabic2roman ($) {
|
|||||||
return $n
|
return $n
|
||||||
if ( $n >= 1000001. ); # numbers above cannot be displayed/converted
|
if ( $n >= 1000001. ); # numbers above cannot be displayed/converted
|
||||||
|
|
||||||
|
my %roman = (
|
||||||
|
1 => 'I',
|
||||||
|
5 => 'V',
|
||||||
|
10 => 'X',
|
||||||
|
50 => 'L',
|
||||||
|
100 => 'C',
|
||||||
|
500 => 'D',
|
||||||
|
1000 => 'M',
|
||||||
|
5000 => '(V)',
|
||||||
|
10000 => '(X)',
|
||||||
|
50000 => '(L)',
|
||||||
|
100000 => '(C)',
|
||||||
|
500000 => '(D)',
|
||||||
|
1000000 => '(M)',
|
||||||
|
);
|
||||||
|
|
||||||
for my $v ( sort { $b <=> $a } keys %roman ) {
|
for my $v ( sort { $b <=> $a } keys %roman ) {
|
||||||
my $c = int( $n / $v );
|
my $c = int( $n / $v );
|
||||||
next unless ($c);
|
next unless ($c);
|
||||||
@ -2088,19 +2088,34 @@ sub _GetSeasonPheno ($$;$$) {
|
|||||||
####################
|
####################
|
||||||
# HELPER FUNCTIONS
|
# HELPER FUNCTIONS
|
||||||
|
|
||||||
sub decimal_mark ($$) {
|
sub decimal_mark ($;$) {
|
||||||
my ( $val, $f ) = @_;
|
return $_[0] unless ( looks_like_number($_[0]) );
|
||||||
return $val unless ( looks_like_number($val) && $f );
|
my $d = reverse $_[0];
|
||||||
|
my $locale = ( $_[1] ? $_[1] : undef );
|
||||||
|
|
||||||
my $text = reverse $val;
|
my $old_locale = setlocale(LC_NUMERIC);
|
||||||
if ( $f eq "2" ) {
|
setlocale(LC_NUMERIC, $locale) if ($locale);
|
||||||
$text =~ s:\.:,:g;
|
use locale ':not_characters';
|
||||||
$text =~ s/(\d\d\d)(?=\d)(?!\d*,)/$1./g;
|
my ( $decimal_point, $thousands_sep, $grouping ) =
|
||||||
|
@{ localeconv() }{ 'decimal_point', 'thousands_sep', 'grouping' };
|
||||||
|
setlocale(LC_NUMERIC, "");
|
||||||
|
setlocale(LC_NUMERIC, $old_locale);
|
||||||
|
no locale;
|
||||||
|
|
||||||
|
$thousands_sep = ($decimal_point && $decimal_point eq ',' ? '.' : ',')
|
||||||
|
unless ($thousands_sep);
|
||||||
|
my @grouping =
|
||||||
|
$grouping && $grouping =~ /^\d+$/ ? unpack( "C*", $grouping ) : (3);
|
||||||
|
|
||||||
|
if ( $thousands_sep eq '.' ) {
|
||||||
|
$d =~ s/\./$decimal_point/g;
|
||||||
|
$d =~ s/(\d{$grouping[0]})(?=\d)(?!\d*,)/$1$thousands_sep/g;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;
|
$d =~ s/(\d{$grouping[0]})(?=\d)(?!\d*\.)/$1$thousands_sep/g;
|
||||||
}
|
}
|
||||||
return scalar reverse $text;
|
|
||||||
|
return scalar reverse $d;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _round($;$) {
|
sub _round($;$) {
|
||||||
|
@ -3391,7 +3391,7 @@ sub replaceTemplate ($$$$;$) {
|
|||||||
my $vdm = $desc->{$k};
|
my $vdm = $desc->{$k};
|
||||||
next if ( ref($vdm) );
|
next if ( ref($vdm) );
|
||||||
|
|
||||||
$vdm = UConv::decimal_mark( $vdm, $desc->{decimal_mark} )
|
$vdm = UConv::decimal_mark( $vdm )
|
||||||
if ( defined( $desc->{decimal_mark} ) );
|
if ( defined( $desc->{decimal_mark} ) );
|
||||||
$txt =~ s/%$k%/$vdm/g;
|
$txt =~ s/%$k%/$vdm/g;
|
||||||
Unit_Log3( $device, $reading, $odesc, 10,
|
Unit_Log3( $device, $reading, $odesc, 10,
|
||||||
@ -3466,7 +3466,7 @@ sub replaceTemplate ($$$$;$) {
|
|||||||
my $vdm = $desc->{$k};
|
my $vdm = $desc->{$k};
|
||||||
next if ( ref($vdm) );
|
next if ( ref($vdm) );
|
||||||
|
|
||||||
$vdm = UConv::decimal_mark( $vdm, $desc->{decimal_mark} )
|
$vdm = UConv::decimal_mark( $vdm )
|
||||||
if ( defined( $desc->{decimal_mark} ) );
|
if ( defined( $desc->{decimal_mark} ) );
|
||||||
$txt_long =~ s/%$k%/$vdm/g;
|
$txt_long =~ s/%$k%/$vdm/g;
|
||||||
Unit_Log3( $device, $reading, $odesc, 10,
|
Unit_Log3( $device, $reading, $odesc, 10,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user