我正在构建一个使用少量Sliders的React Native应用。由于某种原因,滑块无法生成不是0.25的倍数的十进制值。当我移动滑块时,我设置组件的状态并显示滑块的值。
例如,我有一个滑块,范围从0到1,步长为0.01。当滑块跟踪器位于范围的中间时,它将组件的状态设置为0.5。如果我将跟踪器向上移动一步,它应该将状态设置为0.51,而是将其设置为0.5099999904632568。
即使我将步长增加到0.1,仍会出现此错误。我知道我可以在将这些值显示给用户之前简单地对其进行舍入,但是有人知道为什么会发生这种情况吗?是因为浮点数学?
答案 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并且它工作正常而不需要四舍五入。