Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Verwirrung mit Datentypen in JS (string vs. number )

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Verwirrung mit Datentypen in JS (string vs. number )

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      h1ob last edited by

      Hallo zusammen,

      ich habe ein Skript um den Gasverbrauch aufzuarbeiten und in SQL / Sourceanalytix zu verarbeiten. Das funktioniert soweit auch ganz gut nur bekomme ich eine Warnung im Log bzgl. der Zuweisung von Werten. Hier der interessante Teil des Skripts:

      var iAktuell = 'javascript.0.scriptEnabled.Zaehler.Gas.aktuellerstand' // Aktueller Stand des Gaszählers - Ist ein State vom Typ "Number"
      [...]
      
      
      // Hier wird eine kleine Zwischenberechnung gemacht (iZwSumme wird mir bei MouseOver ebenfalls als Number angezeigt)
      var lfAktuellm3 = ((parseFloat(getState(iAktuell).val)) + iZwSumme / 1000).toFixed(3);
      
      // Beim Versuch den Wert in in den o.g. State zurück zu schreiben erhalte ich die Warnung:
      setState(iAktuell, lfAktuellm3);
      // Auch so wird es nicht besser... Die Warnung bleibt
      setState(iAktuell, parseFloat(lfAktuellm3).toFixed(3));
      
      

      Hier nochmal die vollständige Warnung:

      You are assigning a string to the state "javascript.0.scriptEnabled.Zaehler.Gas.aktuellerstand" which expects a number. Please fix your code to use a number or change the state type to string. 
      

      Jemand eine Idee, wie man es besser machen könnte?

      paul53 Asgothian UncleSam Homoran 4 Replies Last reply Reply Quote 0
      • paul53
        paul53 @h1ob last edited by paul53

        @h1ob toFixed(3) erzeugt einen String.

        @h1ob sagte:

        Idee, wie man es besser machen könnte?

        var lfAktuellm3 = Math.round(parseFloat(getState(iAktuell).val) * 1000 + iZwSumme) / 1000; // Zahl mit max. 3 Nachkommastellen
        
        1 Reply Last reply Reply Quote 0
        • Asgothian
          Asgothian Developer @h1ob last edited by

          @h1ob Nimm mal das "toFixed(3)" weg. Das konvertiert die Nummer zum String.

          Wenn du sicher gehen willst das du nur 3 Nachkommastellen hast bietet sich "math.round(val * 1000) / 1000" an

          A.

          1 Reply Last reply Reply Quote 0
          • UncleSam
            UncleSam Developer @h1ob last edited by

            @h1ob sagte in Verwirrung mit Datentypen in JS (string vs. number ):

            toFixed(3)

            https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed

            Return value

            A string representing the given number using fixed-point notation.

            toFixed() gibt einen String zurück. Wenn du eine Zahl übergeben willst, dann lass das toFixed() einfach weg.

            1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @h1ob last edited by

              @h1ob sagte in Verwirrung mit Datentypen in JS (string vs. number ):

              javascript.0.scriptEnabled.Zaehler.Gas.aktuellerstand

              Warum liegt das Skript im Systemverzeichnis script.enabled?

              H 1 Reply Last reply Reply Quote 0
              • H
                h1ob @Homoran last edited by

                Ich danke euch. Da stand ich wohl komplett auf dem Schlauch. Die Warnung ist nun weg.

                @Homoran said in Verwirrung mit Datentypen in JS (string vs. number ):

                @h1ob sagte in Verwirrung mit Datentypen in JS (string vs. number ):

                javascript.0.scriptEnabled.Zaehler.Gas.aktuellerstand

                Warum liegt das Skript im Systemverzeichnis script.enabled?

                Das Skript liegt da nicht. Nur die beiden states die ich für das Skript brauche. Ist unschön, ich weiß. Aber das Skript ist mittlerweile ein paar Jahre alt und damals wusste ich es nicht besser.

                AlCalzone 1 Reply Last reply Reply Quote 0
                • AlCalzone
                  AlCalzone Developer @h1ob last edited by

                  @h1ob sagte in Verwirrung mit Datentypen in JS (string vs. number ):

                  Aber das Skript ist mittlerweile ein paar Jahre alt und damals wusste ich es nicht besser.

                  Grund genug es jetzt mal richtig zu machen 🙂

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  884
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  javascript
                  6
                  7
                  432
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo