Ankündigung

Einklappen
Keine Ankündigung bisher.

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