Die Antwort auf Ihre Frage, warum der Code 42 mal "20" und mal "21" bedeutet, möchte ich Ihnen natürlich nicht schuldig bleiben.
Der Schieberegler bewegt sich kontinuierlich, also ohne Schritte. Das bedeutet, wenn er auf dem Bildschirm z.B. 400 Pixel einnimmt, dass je 4 Pixel für einen Code-Punkt stehen. Allerdings arbeitet der Schieberegler im Browser erstmal nicht mit ganzen Zahlen (wie später im Datensatz), sondern mit Kommazahlen. Also würden die 4 Pixel z.B. für 50,0; 50,25; 50,5 und 50,75 stehen.
Oder um es auf Ihren konkreten Fall zu übertragen: Wenn der Schieberegler bei 41,6 steht, dann wird im Datensatz gerundet der Code 42 gespeichert. Aber die Anzeige rechnet mit der Komma-Zahl, denn Sie runden laut Ihrer Formel er nach dem Rechnen:
Math.round((value - 1) / (2))
(41,6 - 1) / 2 = 20,3
Nach dem Runden wir hier also 20 auf dem Bildschirm angezeigt. Und was passiert bei 42,4? Dan wird ebenfalls 42 im Datensatz gespeichert, aber ...
(42,4 - 1) / 2 = 20,7
... auf dem Bildschirm erscheint eben aufgrund der Rechnung der Code 21.