(Rundungsfehler) bei slider

Begonnen von SSSleep, 15 November 2015, 15:47:17

Vorheriges Thema - Nächstes Thema

SSSleep

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

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?

Nobby1805

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
FHEM-Featurelevel: 6.2   (fhem.pl:28227/2023-11-29) auf Windows 10 Pro mit Strawberry Perl 5.32.1.1-32bit
TabletUI: 2.7.15
IO: 2xHMLAN(0.965)|HMUSB2(0.967)

SSSleep

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. 

rudolfkoenig

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.

SSSleep

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.




rudolfkoenig

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.

SSSleep

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?