2017-02-08 12 views
1

Я создаю приложение React Native, которое использует несколько Sliders. По какой-то причине слайдер не способен создавать десятичные значения, которые не кратно 0,25. Когда я перемещаю ползунок, я устанавливаю состояние компонента и отображаю значение ползунка.React Native Slider обновляет неправильное значение шага

Например, у меня есть ползунок, который находится в диапазоне от 0 до 1 с шагом 0,01. Когда слайдер-трекер находится в середине диапазона, он устанавливает состояние компонента 0,5. Если я перемещаю трекер на один шаг, он должен установить состояние в 0.51, но вместо этого он будет равен 0.5099999904632568.

Даже если я увеличиваю шаг до 0,1, эта ошибка все еще происходит. Я знаю, что могу просто обойти эти значения, прежде чем показывать их пользователю, но кто-нибудь знает, почему это происходит? Это из-за математики с плавающей запятой?

enter image description here

ответ

1

Вопрос не обязательно с плавающей точкой математику. Это просто числа с плавающей запятой (в двоичном виде).

Там это действительно хорошее объяснение проблемы в this answer, но вот краткое резюме: так же, как десятичные (основание 10) обозначение имеет проблемы, представляющие фракции как 1/3, где он представляет их в виде повторяющейся последовательности (т.е. 0.3333333... повторяющихся). У двоичной есть такая же проблема с числами, которые представлены просто штрафом в десятичной форме, например 0.1 (что-то вроде 0.0001100110011... в двоичном виде). Затем эта разница усиливается количеством операций, которые вы делаете, используя номер.

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

Надеюсь, это поможет!

1

У меня была такая же проблема, как мне нужно, от 34 до 42 с шагом 0,1 Моим решением было дать min = 340 max = 420 step = 1 и место, где я показываю значение, которое я разделяю на 10, и он отлично работает без необходимости округления.

+0

Ничего себе! Большое спасибо. Мне нужно 0,1, 0,2 ... 5,0. Сделал это с помощью min: 100 max: 5000, а затем разделился на 1000. –

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

  • Нет связанных вопросов^_^