2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-25 03:44:52 +00:00

fhem.pl: tinkering with ReadingsNum (Forum #137283)

git-svn-id: https://svn.fhem.de/fhem/trunk@28580 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2024-03-02 10:05:48 +00:00
parent f4eba4a957
commit 255429301b

View File

@ -4626,6 +4626,19 @@ resolveAttrRename($$)
###########################################
# Functions used to make fhem-oneliners more readable,
# but also recommended to be used by modules
sub
numberFromString($$;$)
{
my ($val,$default,$round) = @_;
return undef if(!defined($val));
# 137283 & perl cookbook
$val = ($val =~ /(([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?)/ ? $1 : "");
$val =~ s/^([+-]?)0+([1-9])/$1$2/; # Forum #135120, dont want octal numbers
return $default if($val eq "");
$val = round($val,$round) if(defined $round);
return $val;
}
sub
InternalVal($$$)
{
@ -4641,10 +4654,7 @@ sub
InternalNum($$$;$)
{
my ($d,$n,$default,$round) = @_;
my $val = InternalVal($d,$n,$default);
$val = ($val =~ /(-?\d+(\.\d+)?)/ ? $1 : "");
$val = round($val,$round) if($round);
return $val;
return numberFromString(InternalVal($d,$n,$default),$default,$round);
}
sub
@ -4664,14 +4674,7 @@ sub
OldReadingsNum($$$;$)
{
my ($d,$n,$default,$round) = @_;
my $val = OldReadingsVal($d,$n,$default);
return undef if(!defined($val));
return $val if(looks_like_number($val)); # 137283
$val = ($val =~ /(-?\d+(\.\d+)?)/ ? $1 : "");
$val =~ s/^(-?)0+([1-9])/$1$2/; # Forum #135120, dont want octal numbers
return $default if($val eq "");
$val = round($val,$round) if(defined $round);
return $val;
return numberFromString(OldReadingsVal($d,$n,$default),$default,$round);
}
sub
@ -4713,14 +4716,7 @@ sub
ReadingsNum($$$;$)
{
my ($d,$n,$default,$round) = @_;
my $val = ReadingsVal($d,$n,$default);
return undef if(!defined($val));
return $val if(looks_like_number($val)); # 137283
$val = ($val =~ /(-?\d+(\.\d+)?)/ ? $1 : "");
$val =~ s/^(-?)0+([1-9])/$1$2/; # Forum #135120, dont want octal numbers
return $default if($val eq "");
$val = round($val,$round) if(defined $round);
return $val;
return numberFromString(ReadingsVal($d,$n,$default),$default,$round);
}
sub