Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Division ergibt immer Null (bei String)

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - Division ergibt immer Null (bei String)

    Hallo @alle:

    ich komme bei einem simplen Divisionsproblem nicht weiter.

    In einem plugin soll ein neuer Wert durch Division zweier Ausgangswerte ermittelt werden. Nur bringt mir die Division als Ergebnis immer Null. Ich habe das ganze schon für die Eingangsvariablen mit Interger und Float probiert immer dasselbe.

    Ich bin ratlos.

    Hier mal die releventen Ausschnitte aus dem plugin:

    Code:
    push @AlleHTH, { name => "BadOG", regression => "[COLOR=Red]2[/COLOR]", tempwunsch => "[COLOR=Red]24[/COLOR]", tempwunsch_ga => "", tempakt_ga => "x/x/x", trigger_ga => "x/x/x", sperre_ga => "" };
    Code:
    # Die aktuelle Raumtemperatur wird ermittelt
    my $tempakt = sprintf ("%.2f", knx_read($element->{tempakt_ga}, 900, 9));
    #return $tempakt;
    # Berechnen des Delta zwischen Wunschtemperatur und aktueller Temperatur
    if ($element->{tempwunsch_ga} eq "")
    { 
    my $delta = sprintf ("%.2f", $element->{tempwunsch} - $tempakt);
    #return $delta;  [COLOR=Blue]----> ergibt die gewuenschte Ausgabe (z.B. 3.40)[/COLOR]
    }
    ...
    Code:
    # Heizzeit berechnen, die benoetigt wird um von der aktuellen Temperatur
    # auf die Wunschtemperatur zu kommen
    my $regression = sprintf ("%.2f", $element->{regression});
    #return $regression; [COLOR=Blue]----> ergibt die gewuenschte Ausgabe (z.B. 2.00)[/COLOR]
    [COLOR=Red]my $heizzeit = $delta/$regression;
    return $heizzeit" Stunden Heizzeit"; [/COLOR][COLOR=Blue]----> ergibt immer 0.00 - warum ????[/COLOR]
    Viele Grüße Jens

    #2
    Du definierst die zwei Werte als Strings, nicht als Zahlen. Probier es ohne die Anführungszeichen.
    Achso, und sprintf kannst du dann auch weglassen (was ja erst Recht eine Zahl in einen string umwandelt).

    Grüße,
    Julian

    Kommentar


      #3
      @ netzkind: selbes Ergebnis!
      Viele Grüße Jens

      Kommentar


        #4
        Zitat von jensgulow Beitrag anzeigen
        @ netzkind: selbes Ergebnis!
        Hast du denn sämtliche sprintf entsorgt? tempakt formatierst du damit ja auch...

        Nachtrag: Alles quatsch, Perl typisiert Skalare garnicht (vgl. http://stackoverflow.com/questions/1...-float-in-perl).
        Vermutlich ist es eher die fehlende String-Verkettung in deinem letzten return, da sollte noch ein Punkt mit rein nehme ich an...

        Kommentar


          #5
          Hatte ich auch schon mit Punkt ausprobiert
          Code:
          [COLOR=Red]return $heizzeit." Stunden Heizzeit";[/COLOR]
          ...selbes Ergebnis
          Viele Grüße Jens

          Kommentar


            #6
            Zitat von jensgulow Beitrag anzeigen
            Hatte ich auch schon mit Punkt ausprobiert
            Code:
            [COLOR=Red]return $heizzeit." Stunden Heizzeit";[/COLOR]
            ...selbes Ergebnis
            Was heißt "selbes Ergebnis"? Hast du als Ausgabe dann auch "0.00", oder "0.00 Stunden Heizzeit"?

            Und wieso eigentlich 0.00? Ich sehe hier keine Formatierung für $heizzeit, wie kommt der da auf zwei Nachkommastellen?
            Fehlt möglicherweise zu viel vom Programmcode um den Fehler zu finden?

            Kommentar


              #7
              0.00 Stunden Heizzeit ist die Ausgabe - mein Problem ist wirklich, dass die Division offensichtlich fehlschlägt.
              Viele Grüße Jens

              Kommentar


                #8
                Ich denke das Problem liegt darin, dass $regression ein String ist. Und Strings lassen sich nicht dividieren. Du musst also aus dem String erst zu integer konvertieren.

                Und zu was brauchst du %.2f? Am besten rechnest du immer mit Ganzzahlen. Also wenn Stunden zu ungenau sind, dann rechne mit Minuten aber vermeide Kommastellen. Das löst viele Probleme.
                Gruss Patrik alias swiss

                Kommentar


                  #9
                  @swiss: ich hatte das anfangs mit integer versucht - selbes Ergebnis. Habe es aktuell noch mal ausprobiert

                  my $delta = int($element->{tempwunsch} - $tempakt);

                  ...

                  my $regression = int($element->{regression});


                  Somit werden ja quasi vor der Berechnung alle Werte als integer übergaben - wieso funzt dann eine simple Division nicht?

                  my $heizzeit = $delta/$regression;
                  Viele Grüße Jens

                  Kommentar


                    #10
                    AW: Division ergibt immer Null (bei String)

                    Am besten mal das ganze Plugin Posten. Im ersten Beitrag wird $delta nur im if-Teil initialisiert. Was passiert denn außerhalb?
                    Grüße
                    Michael

                    Kommentar


                      #11
                      Hmm... Haben denn auch alle Variabeln ($delta und $regression) Werte?
                      Gruss Patrik alias swiss

                      Kommentar


                        #12
                        Hat sich erledigt, ich hatte eine Variable doppelt initialisiert - nachdem das revidiert ist läuft es
                        Viele Grüße Jens

                        Kommentar

                        Lädt...
                        X