Fix decimal and negative range

Fix two issues

1. knobs break with step is a decimal, due to using `~~` for rounding. Switched to using `Math.floor` and `Math.round` instead.

2. knobs break when the range is from negative number to positive number - check for max value when it is 0 by negating it always evaluates to `true`, so it always gets reset to default max instead of what user specified. Replaced with check for `undefined` instead.