NEWS
[gelöst] 1 + 2 = 12?
-
Ich möchte zum heutigen Tag ein paar tage hinzuzählen. Nachdem das nicht geklappt hat hab ich es Schritt für Schritt programmiert:
on(DPBewaesserungAnzalTage, async (data) => { let day = new Date(); let days:number = getState(DPBewaesserungAnzalTage).val; let date:number = day.getDate(); let newDate:number = date + days; console.log(days); console.log(date); console.log(newDate); day.setDate(newDate); console.log(day.toLocaleString()); });
Gebe ich im Datenpunkt "DPBewaesserungAnzalTage" 5 ein, bekomme ich in newDate 225, gebe ich 6 ein bekomme ich 226, wie wenn er strings zusammen legt:
Man beachte, dass die variablen alle (ausser day) vom typ number sind.
gebe ich den code in https://playcode.io/typescript ein (natürlich mit einer konstanten anstelle des Datenpunktes) läuft alles richtig:
Was mach ich falsch???
-
@iob69 sagte in 1 + 2 = 12?:
Gebe ich im Datenpunkt "DPBewaesserungAnzalTage" 5 ein, bekomme ich in newDate 225, gebe ich 5 ein bekomme ich 226,
einmal 5 und einmal 5???
@iob69 sagte in 1 + 2 = 12?:
wie wenn er strings zusammen legt:
Man beachte, dass die variablen alle (ausser day) vom typ number sind.und der eingelesene Wert ist vom Typ???
-
@iob69 sagte in 1 + 2 = 12?:
Man beachte, dass die variablen alle (ausser day) vom typ number sind.
Was gibt dir denn
console. log (typeof days); console. log (typeof date);
Und welchen Datentyp hat der State mit der Objekt ID
DPBewaesserungAnzalTage
-
@iob69 nur weil du sagst das der Type number sein soll ist es keineswegs eine Nummer. Wenn du mit typeof prüfst ist sicher eins davon ein String.
Im Zweifel musst du den Typ deiner Eingabe mit Int() Konvertieren.
Als erstes würde ich jedoch Mal den Datenpunkt checken ob der auch als number angelegt wurde
-
@iob69 sagte: Datenpunkt "DPBewaesserungAnzalTage" 5 ein
Versuche es mal mit
let days = parseInt(getState(DPBewaesserungAnzalTage).val);
-
-
@jey-cee sagte in 1 + 2 = 12?:
nur weil du sagst das der Type number sein soll ist es keineswegs eine Nummer. Wenn du mit typeof prüfst ist sicher eins davon ein String.
Ja tatsächlich liefert mit der Datenpunkt DPBewaesserungAnzalTage einen String. Aber der ist vom Typ number!
{ "common": { "type": "number", "desc": "Days between irrigations", "name": "0_userdata.0.Steuerzentrale.Garten.Bewaesserung.AnzalTage", "role": "state" }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1750595424888, "_id": "0_userdata.0.Steuerzentrale.Garten.Bewaesserung.AnzalTage", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
Wieso liefert der mit einen String zurück, dann ist doch die Typenangabe völlig überflüssig!
Ok, dann halt in number korrigieren, ist aber schon komisch.
Edit: Das Control JQui Input liefert mir offenbar den String. Das hab ich nicht beachtet, dass der ja wohl auch für Buchstaben-Eingabe funktioniert.
Allerdings kann man dort angeben "als string" was nicht der Fall war. Und man kann sogar stellen hinter dem Komma angeben. Er liefert trotzdem einen String... -
@iob69 sagte in [gelöst] 1 + 2 = 12?:
Datenpunkt DPBewaesserungAnzalTage einen String. Aber der ist vom Typ number!
Der DP kann vom Typ sein was er will, wenn du da einen String reinschreibst.
Dann gibt es zwar eine Meldung im log, die hastcdu wohl ignoriert. -
@iob69 sagte in [gelöst] 1 + 2 = 12?:
Edit: Das Control JQui Input liefert mir offenbar den String. Das hab ich nicht beachtet, dass der ja wohl auch für Buchstaben-Eingabe funktioniert.
Allerdings kann man dort angeben "als string" was nicht der Fall war. Und man kann sogar stellen hinter dem Komma angeben. Er liefert trotzdem einen String...Dann ist das wohl ein Bug (oder so dokumentiert). Ansonsten könntest Du auch einen Alias nutzen um immer einen numerischen Wert zu parsen. Das Ziel von dem Input dann auf String umstellen, damit es keine Warnung im Log gibt