Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

Rechnen mit Dezimalwerten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Rechnen mit Dezimalwerten

    Hallo in die Runde,

    innerhalb einer Rule versuche ich erfolglos, einen Bruchteil eines Integers auszurechnen:
    Code:
        // aktuelle Helligkeitswerte ermitteln
        var int iHellGalerieGast = (IRM_Galerie_Gast_Brightness.state as DecimalType).intValue
        var int iHellGalerie = (IRM_Galerie_Brightness.state as DecimalType).intValue
        var int iHellFlur = (IRM_Flur_Brightness.state as DecimalType).intValue
        
        logInfo("helligkeit.rules","Helligkeit Flur: " + iHellFlur)
        logInfo("helligkeit.rules","Helligkeit Galerie: " + iHellGalerie)
        logInfo("helligkeit.rules","Helligkeit GalGast: " + iHellGalerieGast)
        
        // Gesamthelligkeit als gewichtetes Mittel, dabei die Gal-Sensoren mit doppeltem Gewicht einfliessen lassen
        var int iHellGes = (2 / 5 * iHellGalerieGast.doubleValue).intValue + (2 / 5 * iHellGalerie.doubleValue) + (1 / 5 * iHellFlur.doubleValue)).intValue
        logInfo("helligkeit.rules","Gewichtete Helligkeit: " + iHellGes)
    Ergebnis in iHellGes ist jedoch immer 0:
    Code:
    2015-07-19 06:15:07.418 [INFO ] [.model.script.helligkeit.rules] - Helligkeit Flur: 33
    2015-07-19 06:15:07.422 [INFO ] [.model.script.helligkeit.rules] - Helligkeit Galerie: 33
    2015-07-19 06:15:07.425 [INFO ] [.model.script.helligkeit.rules] - Helligkeit GalGast: 33
    2015-07-19 06:15:07.435 [INFO ] [.model.script.helligkeit.rules] - Gewichtete Helligkeit: 0
    Was mache ich denn bei der Konvertierung falsch?

    #2
    Ich nehme mal an er rechnet 2/5 zuerst aus als Integer, das ist 0.
    Rechne doch mal deinen Wert erst * 5 und dann durch 2.

    Holger

    Kommentar


      #3
      Zitat von HolgerW Beitrag anzeigen
      Ich nehme mal an er rechnet 2/5 zuerst aus als Integer, das ist 0.
      Rechne doch mal deinen Wert erst * 5 und dann durch 2.

      Holger
      Das geht. Kann aber eigentlich doch nur eine Krücke sein.
      Wie geht es denn nach Lehrbuch?

      Kommentar


        #4
        Zitat von wbuh Beitrag anzeigen
        Wie geht es denn nach Lehrbuch?
        Hab's herausgefunden:
        Code:
        var int iHellGes = ((2.0/5.0 * iHellGalerieGast.doubleValue) + (2.0/5.0 * iHellGalerie.doubleValue) + (1.0/5.0 * iHellFlur.doubleValue)).intValue()
        Ausschreiben als Dezimalzahl, lässt ihn meinen, es sei eine Dezimalzahl und kein Integer.

        Kommentar


          #5
          ja das geht, rechnen mit float verbraucht aber viel Rechenzeit und Speicher.
          Besser wenn man ein Festkomma oder eben die Integerwerte in der richtigen Reihenfolge berechnen lässt.

          Holger

          Kommentar

          Lädt...
          X