FHEM Forum

FHEM => Frontends => readingsGroup / readingsHistory => Thema gestartet von: grappa24 am 14 Oktober 2022, 11:29:46

Titel: Tausender-Trennzeichen mit valueFormat?
Beitrag von: grappa24 am 14 Oktober 2022, 11:29:46
(Wie) kann man denn ein Tausender-Trennzeichen setzen?valueFormat "%'d" geht leider nicht (bei mir).
Titel: Antw:Tausender-Trennzeichen mit valueFormat?
Beitrag von: JoWiemann am 14 Oktober 2022, 13:43:19
Zitat von: grappa24 am 14 Oktober 2022, 11:29:46
(Wie) kann man denn ein Tausender-Trennzeichen setzen?valueFormat "%'d" geht leider nicht (bei mir).

Laut commandref werden die Formatierungszeichen der Sprintf-Stilformat-Zeichen verwendet. M. W. gibt es kein Zeichen für eine Tausender Formatierung in Perl. %d mit Apostroph gibt es in C/C++.

Grüße Jörg

Titel: Antw:Tausender-Trennzeichen mit valueFormat?
Beitrag von: yersinia am 14 Oktober 2022, 14:33:07
Würde dir eine Funktion in der myUtils (https://forum.fhem.de/index.php/topic,115576.msg1197505.html#msg1197505) helfen? Weiss nicht, ob dies mit readingsGroup funktioniert.
Titel: Antw:Tausender-Trennzeichen mit valueFormat?
Beitrag von: grappa24 am 14 Oktober 2022, 16:16:20
@yersinia: Prima, das hilft mir, muss ich halt nur vorschalten
Titel: Antw:Tausender-Trennzeichen mit valueFormat?
Beitrag von: Franz Tenbrock am 28 November 2022, 18:02:26
würde mich auch interessieren,
würde gerne in meiner Readingsgroup die Watt Werte in KW umgerechnet anzeigen, leider nur dummy

hatte so was wie das hier probiert:

valueFormat {(my $NewValue = $VALUE / 1000)}
damit kann ich im Reading umrechnen, aber nun habe ich teilweise 4 Nachkommastellen, das dann formatieren habe ich noch nicht geschafft
Titel: Antw:Tausender-Trennzeichen mit valueFormat?
Beitrag von: grappa24 am 30 November 2022, 10:29:40
Mit der sub von yersinia hab ich es z.B. wie folgt umgesetzt:


brightness 3455.77
userReadings Brightness { tausender((split(/\./, ReadingsVal("HM_6ABA70","brightness", 5000.0)))[0]) }
Brightness 3.455


sub tausender {
  my $zahl = shift;
  my $text = reverse $zahl;
  $text =~ s/\./\,/g;  #replace decimal point by decimal comma
  $text =~ s/(\d\d\d)(?=\d)(?!\d*\,)/$1./g;
  return scalar reverse $text;
}


P.S. Das split() entfernt die Nachkommastellen:
split(/\./, ... [0])