React Native Slider更新错误的步骤值

时间:2017-02-08 23:07:09

标签: javascript ios react-native floating-point

我正在构建一个使用少量Sliders的React Native应用。由于某种原因,滑块无法生成不是0.25的倍数的十进制值。当我移动滑块时,我设置组件的状态并显示滑块的值。

例如,我有一个滑块,范围从0到1,步长为0.01。当滑块跟踪器位于范围的中间时,它将组件的状态设置为0.5。如果我将跟踪器向上移动一步,它应该将状态设置为0.51,而是将其设置为0.5099999904632568。

即使我将步长增加到0.1,仍会出现此错误。我知道我可以在将这些值显示给用户之前简单地对其进行舍入,但是有人知道为什么会发生这种情况吗?是因为浮点数学?

enter image description here

2 个答案:

答案 0 :(得分:1)

问题不一定是浮点数学。它通常只是浮点数(存储为二进制)。

this answer中的问题有一个非常好的解释,但是这里有一个简短的总结:就像十进制(基数10)表示法在表示1/3之类的分数时遇到问题,它将它们表示为重复序列(即0.3333333...重复)。二进制具有相同的问题,数字表示十进制正常,如0.1(类似二进制中的0.0001100110011...)。然后,使用该数字执行的操作数会放大这种差异。

你可以采取的一种方法,至少是为了显示这些数字,就像你说的那样四舍五入。但是,这不会消除由于代码中的浮点数而导致的其他不准确性。

希望这有帮助!

答案 1 :(得分:1)

我有同样的问题,从34到42,步长为0.1 我的解决方案是给min = 340 max = 420 step = 1并且我的地方显示值I除以10并且它工作正常而不需要四舍五入。