Skip to main content

Search and Top Navigation

#10721 closed bug (fixed)

Opened December 09, 2014 01:57AM UTC

Closed January 12, 2015 05:21PM UTC

Last modified February 09, 2015 05:04PM UTC

Slider: Cannot reach max value with step of 0.1

Reported by: mikedehaan Owned by:
Priority: blocker Milestone: 1.11.3
Component: ui.slider Version: 1.11.2
Keywords: regression Cc:
Blocked by: Blocking:
Description

I've created a slider with values from 50 to 60 with a 0.1 step. The lower bound works just fine, but the max value is never able to be reached via the slider.

Here's a jsfiddle example:

http://jsfiddle.net/v13t8cmj/2/

The slider in the example should go to 60, however it stops at 59.9.

Attachments (0)
Change History (9)

Changed December 09, 2014 01:51PM UTC by scottgonzalez comment:1

keywords: → regression
milestone: none1.12.0
priority: minorblocker
status: newopen
summary: Unable to slide to max value when using range sliderSlider: Cannot reach max value with step of 0.1

Confirmed that this regressed in 1.11.2.

Changed December 09, 2014 02:12PM UTC by dekajp comment:2

_comment0: I assume step should be a integer than a float \ \ {{{ \ _calculateNewMax: function() { \ var remainder = ( this.options.max - this._valueMin() ) % this.options.step; \ this.max = this.options.max - remainder; \ } \ }}} \ \ reference : https://github.com/dekajp/jquery-ui/commit/8932df74a70ea2e91cd7a6eb2f3c546f7f8c75971418292613336585

I assume step should be a integer than a float

_calculateNewMax: function() {
		var remainder = ( this.options.max - this._valueMin() ) % this.options.step;
		this.max = this.options.max - remainder;
}

reference : https://github.com/dekajp/jquery-ui/commit/8932df74a70ea2e91cd7a6eb2f3c546f7f8c7597

Edit :

I think the problem is floating point calculation . in chrome devtools type this 1.005 * 100 = 100.49999999999999

Changed December 17, 2014 02:43PM UTC by jzaefferer comment:3

Changed January 06, 2015 05:48PM UTC by Kamilche comment:4

Replying to [comment:2 dekajp]:

I think the problem is floating point calculation . in chrome devtools type this 1.005 * 100 = 100.49999999999999

You're right, that's the problem. Modulo isn't mean to be used with floats, apparently. I got around it by multiplying by 100 to get larger numbers, performing the modulo function, then dividing by 100 at the end. Plus I rounded at the end to discard excess precision.

        _calculateNewMax: function () {
            var multiplier = 100;
            var remainder = ((this.options.max - this._valueMin()) * multiplier) % (this.options.step * multiplier) / multiplier;
            remainder = Math.round((remainder + 0.00001) * multiplier) / multiplier; // Round off excess decimals
            this.max = this.options.max - remainder;
        },

Changed January 06, 2015 06:40PM UTC by dekajp comment:5

Please look at the latest fix in the pull request.

https://github.com/jquery/jquery-ui/pull/1398#issuecomment-68391087

Replying to [comment:4 Kamilche]:

Replying to [comment:2 dekajp]: > I think the problem is floating point calculation . in chrome devtools type this 1.005 * 100 = 100.49999999999999 You're right, that's the problem. Modulo isn't mean to be used with floats, apparently. I got around it by multiplying by 100 to get larger numbers, performing the modulo function, then dividing by 100 at the end. Plus I rounded at the end to discard excess precision.
>         _calculateNewMax: function () {
>             var multiplier = 100;
>             var remainder = ((this.options.max - this._valueMin()) * multiplier) % (this.options.step * multiplier) / multiplier;
>             remainder = Math.round((remainder + 0.00001) * multiplier) / multiplier; // Round off excess decimals
>             this.max = this.options.max - remainder;
>         },
> 

Changed January 12, 2015 05:21PM UTC by Jyoti Deka comment:6

resolution: → fixed
status: openclosed

Slider: Fix max calculation, when step is float

Fixes #10721

Closes gh-1398

Changeset: ae1d6d5f90236405023964bb3061eccd6c625e39

Changed February 06, 2015 09:28PM UTC by scottgonzalez comment:7

#11039 is a duplicate of this ticket.

Changed February 09, 2015 05:03PM UTC by Jyoti Deka comment:8

Slider: Fix max calculation, when step is float

Fixes #10721

Closes gh-1398

(cherry picked from commit ae1d6d5f90236405023964bb3061eccd6c625e39)

Changeset: dfa3a9f8c983f5206d49000a170b42581fcc5478

Changed February 09, 2015 05:04PM UTC by scottgonzalez comment:9

milestone: 1.12.01.11.3