NEWS
Math.abs() in Script / Funktion
-
Hallo Forum,
Ich bin noch nicht lange mit node-red zu Gange. Eher grad beim Einarbeiten auf einem Raspi.
Dabei ist mir aufgefallen, dass Math.abs() offenbar nicht arbeitet. Hat jemand einen Tip, woran das liegen könnte?
Ich hab mal einen kleinen Testflow gemacht (siehe Bild).
Hier der Flow:
[{"id":"8b07e542.c99468","type":"inject","z":"23e6ba9b.8080b6","name":"number (13.56)","topic":"","payload":"13.56","payloadType":"num","repeat":"","crontab":"","once":false,"x":155,"y":81,"wires":[["72a89e91.6902"]]},{"id":"9d858752.0e5a38","type":"debug","z":"23e6ba9b.8080b6","name":"","active":true,"console":"false","complete":"payload","x":154,"y":248,"wires":[]},{"id":"72a89e91.6902","type":"function","z":"23e6ba9b.8080b6","name":"abs","func":"msg.payload = Math.abs(msg.payload);\nreturn msg;","outputs":1,"noerr":0,"x":148,"y":166,"wires":[["9d858752.0e5a38"]]}]
Vlt. weis jemand Rat
Danke
Reiner
-
Naja, der Absolutwert von 13.56 ist 13.56. Probier mal eine negative Zahl
Oder suchst du Math.round/Math.ceil/Math.floor?
-
Ja, sorry, haps inzwischen auch gemerkt;-)
Eigentlich hab ich eine Methode für den Vorkommawert gesucht. Aber Number.toInteger() gibts wohl nicht mehr.
Gibt es da was äquivalentes?, oder ist
msg.payload = Math.trunc(Math.abs(msg.payload));
die gängige Art?
-
Nimm doch einfach parseInt().
dna909
-
Ja, geht. Aber das Math.abs() bliebe mir dennoch nicht erspart. Oder?
Wird höchste Zeit, mir mal ein Javascript-Buch zu schnappen :mrgreen:
Danke für die Hilfe
-
Ja, geht. Aber das Math.abs() bliebe mir dennoch nicht erspart. Oder? `
Erwartest du negative Zahlen? Dann brauchst du es, sonst nicht. -
> Erwartest du negative Zahlen? Dann brauchst du es, sonst nicht.
Nein in meinem Fall erwarte ich sie nicht. Konkret geht es um eine uptime Formatierung. Da reicht parseInt() oder Math.floor().Ich habe eher gedacht, es gibt eine integer() Funktion und ich find sie bloß nicht.
Habs jetzt so gelöst:
//hours var h = Math.floor(msg.payload.uptime/3600) ; //rest minutes var mm = msg.payload.uptime % 3600 //minutes var m = Math.floor(mm/60); //seconds var s = (mm % 60); //uptime as string msg.payload = "uptime: " + h + " h " + m + "min " + s + "sec"; return msg;
Weis zwar nicht ob es optimalere Lösungen gibt, aber tut erst mal;-)