2015-01-08 3 views
1

Я инициализирую ползунок jquery ui, который имеет, например, значение .01, мин .01 и максимум 5000. Моя проблема в том, что max останавливается на 4999.990000000001. Вы видите, что я делаю неправильно?JQuery UI Slider неправильное максимальное значение

$("#sliderModal").slider({ 
    value:r.min_price/100, 
    min: r.min_price/100, 
    max: r.max_price/100, 
    step:0.01, 
    slide: function(event, ui) { 
     $("#amountModal").val(ui.value); 
    } 
}); 
+1

Попробуйте запустить консоль 'r.max_price/100' и ​​посмотрите, что вы получаете. Во всяком случае, вы упали на вицим [** с арифметикой с плавающей запятой **] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – adeneo

+1

Как сказал adeneo, если вы используете разделение или умножить значения float, вы можете получить некоторые странные результаты. Используйте Math.floor() или Math.round(), чтобы получить следующее значение. – Tyr

ответ

1

Это ошибка округления, связанная с поплавковыми значениями. Самый простой способ, чтобы исправить это было бы использовать вместо целых чисел:

$("#sliderModal").slider({ 
    value:r.min_price, 
    min: r.min_price, 
    max: r.max_price, 
    step:1, 
    slide: function(event, ui) { 
     $("#amountModal").val(ui.value*100); 
    } 
}); 

Обратите внимание, что я удалил все /100 операции и умноженное значение на 100.

Это предполагает, что значение не отображается число - если это так, вы получите число, умноженное на 100 вместо хорошего, аккуратного двухзначного числа, которое вы ищете.

+0

Я пробовал это, но я получаю целые значения на слайдере :( – CaitlinHavener

+0

Извините, моя ошибка - вы можете изменить эту последнюю строку на '$ (" #amountModal ") .val (ui.value)', и она должна работать Это было какое-то время, так как я имел дело с слайдером :-) – Kryten

+0

Он работал, когда я сделал $ ("#amountModal") .val (ui.value/100)! – CaitlinHavener

1

Быстрое исправление - плавающие числа

в Jquery-ui.js и _calculateNewMax функции, изменить

Math.floor(.. 

в

Math.round(.. 

Итак, если есть

aboveMin = Math.floor((+(max-min).toFixed(this._precision()))/step)*step; 

в

aboveMin = Math.round((+(max-min).toFixed(this._precision()))/step)*step; 

Примечание *: вам нужно отредактировать и связать файл Modded Js, локальной.

Примечания **: Проверьте ссылку, чтобы указать на Jquery-ui.js и не Jquery-ui.min.js

проверяется на 1.11.4

Надеются, что это помогает,

giannisepp

Смежные вопросы