[gelöst] Zahlen umwandeln, bzw. nur teile verwenden

Begonnen von Chiemgauer, 27 Mai 2017, 12:22:13

Vorheriges Thema - Nächstes Thema

Chiemgauer

Servus,
ich bekomme von meiner synology eine Festplattenspeicher von 4949679534080 Bytes gemeldet. Ichmöchte dies nun in Terra, giga und MB anzeigen. Das rechnen ist mir klar, nur wenn ich terra berechne ist der Wert 4.949679534080. hier einfach die kommastellen weglassen und man hat eine reine Anzeige von 4 Terra. Aber wie macht man das für giga und MB?

KernSani

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Chiemgauer


CoolTux

sprintf oder substr verwenden. Anwendung bitte im Selbststudium versuchen zu erlernen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

Vielleicht mal grundsätzliche Frage: Willst du einzelne (user-)readings für GB, MB usw... oder willst du alles via stateFormat formatieren? Was hast du bisher probiert?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Chiemgauer

Eigentlich möchte ich einzelne userreadings, da ich es in Ftui, detailliert und übersichtlich, darstellen möchte. Probiert habe ich  noch nicht viel, da ich nicht weiß wie ich es anpacken soll. Viel gesucht und gelesen, aber nicht wirklich was gefunden.

Chiemgauer

Substr ist mir bekannt, aber das hilft mir nur die hinteren Zahlen weg zu kürzen. Was die Schwierigkeit ist, ist die vorderen Zahlen zu kürzen. Das heißt bei 4957GB die 4 weg zu bekommen.

KernSani

#7
Wenn du nur wegkürzen willst, kannst du dich ja von hinten nach vorne durch arbeiten, Pseudocode:

$byte = substr <dein reading>, -3;
$kbyte = substr <dein reading>, -6,3;
...



Nicht elegant, aber sollte funktionieren...



RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

SabineT

Zitat von: Chiemgauer am 27 Mai 2017, 22:31:00
Substr ist mir bekannt, aber das hilft mir nur die hinteren Zahlen weg zu kürzen. Was die Schwierigkeit ist, ist die vorderen Zahlen zu kürzen. Das heißt bei 4957GB die 4 weg zu bekommen.
du willst aus 4957GB dann 957GB machen?

Chiemgauer

Ich möchte aus 4949679534080bytes eine Anzeige in tb,gb,mb machen. Das heißt (natürlich mit den Faktor 1024)  4tb, 609gb, 382mb machen. Finde es übersichtlicher als eine ewige Zahl.

KernSani

Ok, dann reicht ein substr natürlich nicht... falls mir niemand zuvor kommt, bastle ich heute abend mal ein Beispiel...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

SabineT

dann müsste ja das Beispiel aus dem Link http://www.perlmonks.org/?node_id=378538, den KernSani weiter oben angegeben hat, brauchbar sein:
sub prettyBytes {
my $size = $_[0];
foreach ('b','kb','mb','gb','tb','pb')
{
    return sprintf("%.2f",$size)."$_" if $size < 1024;
    $size /= 1024;
}
}
und einfach beim sprintf die gewünschte Anzahl an Kommastellen verwenden.

Sabine

Chiemgauer

Ok der Code kommt in die 99_myutils.
Aber wie setze ich dann die Umrechnung um? Ich steh irgendwie aufnähe Schlauch.

Thorsten Pferdekaemper

Zitat von: Chiemgauer am 31 Mai 2017, 18:13:55
Aber wie setze ich dann die Umrechnung um? Ich steh irgendwie aufnähe Schlauch.
In Deinem ersten Post hast Du den Eindruck erweckt, dass Dir das im Prinzip klar wäre. Wie hättest Du das denn bei Deinem dort genannten Beispiel gemacht?
Gruß,
   Thorsten
FUIP

Chiemgauer

Das aktuelle Reading mit der Rechnung, der aus Bytes Terra macht, kann ich heute Abend wenn ich zuhause bin posten.
Grob gesagt 4949679534080 / 1000000000 =4.949679534080. Im FTUI nur ganze Zahl darstellen. Genaues heute Abend.
Mein Problem ist ja nicht das Rechnen, das denke ich zumindest, sondern wie ich den Code, gespeichert in der 99-MyUtils, dann im Reading einbinde bzw. verwende.