FHEM Forum

FHEM => Frontends => Thema gestartet von: SSSleep am 15 November 2015, 15:47:17

Titel: (Rundungsfehler) bei slider
Beitrag von: SSSleep am 15 November 2015, 15:47:17
Hallo, bei mir rundet der slider in der Weboberfläche nicht gescheit (siehe Anhang).

Ich hatte das Thema schon einmal im Anfängerforum, da konnte mir aber leider niemand helfen:

http://forum.fhem.de/index.php/topic,43795.msg357106.html#msg357106 (http://forum.fhem.de/index.php/topic,43795.msg357106.html#msg357106)

Hier noch mein define:

define Heizung_Soll_Tag dummy
attr Heizung_Soll_Tag userattr sortby
attr Heizung_Soll_Tag alias Tag
attr Heizung_Soll_Tag group Sollwerte
attr Heizung_Soll_Tag room Heizung
attr Heizung_Soll_Tag setList state:slider,5.0,0.2,25.0,1
attr Heizung_Soll_Tag sortby 2
attr Heizung_Soll_Tag webCmd state


Verstehe ich das richtig, dass dieser Fehler sehr wahrscheinlich in der Datei "\fhem-5.6\www\pgm2\fhemweb_slider.js" zu suchen ist?
Titel: Antw:(Rundungsfehler) bei slider
Beitrag von: Nobby1805 am 15 November 2015, 16:24:15
Aus meiner Sicht ist das kein Rundungsfehler sondern die Unfähigkeit des Datentypes Float vermeintliche einfache Dezimalbrüche exakt darzustellen ...
0,5 ist kein Problem (1/2) aber 0,1 oder 0,2 ist nicht exakt darstellbar ... allerdings sollten bei der Ausgabe(-formatierung) nicht so viele Nachkommastellen ausgegeben werden
Titel: Antw:(Rundungsfehler) bei slider
Beitrag von: SSSleep am 15 November 2015, 16:39:27
Ok, von Rundungsfehlern zu sprechen, ist vermutlich mathematisch nicht korrekt.

Bestimmt wird bei der Anzeige der Nachkommstellen auf Null geprüft und wenn eine Ziffer einen Wert ungleich null hat, dann werden die Nachkommstellen eben bis dahin angezeigt. 
Titel: Antw:(Rundungsfehler) bei slider
Beitrag von: rudolfkoenig am 15 November 2015, 19:39:12
ZitatBestimmt wird bei der Anzeige der Nachkommstellen auf Null geprüft und wenn eine Ziffer einen Wert ungleich null hat, dann werden die Nachkommstellen eben bis dahin angezeigt. 

Noe. Math.floor(val/stp)*stp liefert halt komische Werte zurueck. Ich habe diese Rundung auf float.toFixed() umgebaut: falls man keine Rundung fuer float spezifiziert hat (letzer Parameter beim slider == 1), dann wird jetzt immer auf die Laenge der Nachkommastellen bei step gerundet. Bin auf Nebeneffekte gespannt.
Titel: Antw:(Rundungsfehler) bei slider
Beitrag von: SSSleep am 16 November 2015, 21:13:56
Hallo und vielen Dank!

Leider haben die Änderungen nur bedingt geholfen. Wenn ich den Slider mit der Maus bewege, dann funktioniert er gut. Benutze ich aber die Pfeiltaste, also Schrittweite genau 1, dann kommt es bei 1/20 auch wieder zu Anzeigefehlern. Bei 1/10 und kleiner hängt sich der Slider dann ganz auf und lässt sich nicht mehr schieben. Das passiert aber nur dann, wenn der Abstand zwischen Min und Max zu groß gewählt wird.

Bezüglich dem "is_float" Flag, ist es scheinbar egal, was man einträgt. Auch ein "i" oder "0" sorgt bei mir für die Anzeige der Nachkommastellen. Erst wenn ich den Wert ganz weg lasse, rundet er auf Ganzzahl.



Titel: Antw:(Rundungsfehler) bei slider
Beitrag von: rudolfkoenig am 17 November 2015, 10:33:45
ZitatBenutze ich aber die Pfeiltaste, also Schrittweite genau 1, dann kommt es bei 1/20 auch wieder zu Anzeigefehlern.
Tastaturbedienung ist purer Luxus, und wurde nur implementiert, weil Leute auf die Traenendruese gedrueckt haben (blind und deswegen auf Tastatur angewiesen). :)
Habs aber trotzdem gefixt, sollte jetzt funktionieren.

ZitatBei 1/10 und kleiner hängt sich der Slider dann ganz auf und lässt sich nicht mehr schieben. Das passiert aber nur dann, wenn der Abstand zwischen Min und Max zu groß gewählt wird.
Das habe ich nicht verstanden.


ZitatErst wenn ich den Wert ganz weg lasse, rundet er auf Ganzzahl.
Und das ist genau so dokumentiert. Ich habe fuer Leute mit zu viel Fantasie (oder mangelndes Lesebeduerfnis?) den Code erweitert, so dass 0 bzw. i (???) ab sofort auf Ganzzahl runden.
Titel: Antw:(Rundungsfehler) bei slider
Beitrag von: SSSleep am 19 November 2015, 20:44:14
Hallo Rudolf,

der Slider funktioniert jetzt super...vielen Dank, für deinen unermüdlichen Einsatz, nicht nur in Sachen "slider"

ZitatZitat

    Bei 1/10 und kleiner hängt sich der Slider dann ganz auf und lässt sich nicht mehr schieben. Das passiert aber nur dann, wenn der Abstand zwischen Min und Max zu groß gewählt wird.

Das habe ich nicht verstanden.

slider 5.0,0.01,25.0,1 -> (25-5) / 0.01=2000

hat sich aufgehängt

slider 5.0,0.01,6,1  ->    (6-5)/0.01= 100

dagegen nicht.

Ist aber seit deiner letzten Änderung nicht mehr aufgetreten.

ZitatUnd das ist genau so dokumentiert.

lese ich in der commandref so nicht:

Zitatif the modifier is of the form ":slider,<min>,<step>,<max>[,1]", then a javascript driven slider is displayed. The optional ,1 at the end avoids the rounding of floating-point numbers.

Das "i" war natürlich nur spielerei und ist nicht ernst zu nehmen, auch wenn es funktioniert

Wie setzt man den thread auf erledigt?