Java 根据目标位置的当前步骤处理下一个动画

Java 根据目标位置的当前步骤处理下一个动画,java,Java,我有一个变量步骤,从0开始。 我在步骤中添加的每个勾号0.025 step += 0.025f; 当步进到达=1.0时,我已到达目标位置。 移动有4个动画,所以如果我将1除以4,我需要在步长达到0.25、0.50、0.75和1.0时增加动画索引 问题是,我不能在浮点上做模数,这些数字不完全是0.25,0.50等等,我做了步进打印,这就是我得到的: 0.025 0.05 0.075 0.1 0.125 0.15 0.17500001 0.20000002 0.22500002 0.2500000

我有一个变量
步骤
,从0开始。 我在步骤中添加的每个勾号
0.025

step += 0.025f;
当步进到达
=1.0
时,我已到达目标位置。 移动有4个动画,所以如果我将1除以4,我需要在步长达到0.25、0.50、0.75和1.0时增加动画索引

问题是,我不能在浮点上做模数,这些数字不完全是0.25,0.50等等,我做了步进打印,这就是我得到的:

0.025
0.05
0.075
0.1
0.125
0.15
0.17500001
0.20000002
0.22500002
0.25000003
0.27500004
0.30000004
0.32500005
0.35000005
0.37500006
0.40000007
0.42500007
0.45000008
0.47500008
0.50000006
0.52500004
0.55
0.575
0.59999996
0.62499994
0.6499999
0.6749999
0.69999987
0.72499985
0.7499998
0.7749998
0.7999998
0.82499975
0.8499997
0.8749997
0.8999997
0.92499965
0.94999963
0.9749996
0.9999996
1.0249996
例如,我不知道为什么我得到的是
0.17500001
,而不是
0.0175
,我希望有人能解释一下,如果可能的话,我想知道,以备将来了解


但是,我还可以做什么来将我的动画索引增量除以精灵移动的距离?我需要使用该步长值来计算它。

Yo始终可以处理整数:

    float valuesAsFloat = 0.325f;

    int result = (int) (valuesAsFloat * 100);
    int step = result / 25;

浮点问题是不可避免的,但有一些解决方案

  • 与其检查精确的浮点值,不如通过检查较小的范围来为该值提供一些公差

  • 可能存在浮点累积效应,一段时间后甚至可能超过您设置的公差。经过n次运算后,可以上下取整

  • >P>您可以考虑使用整数,例如25表示0.025(取决于您需要多少精度)。


    那不是珀西!可能使用double会阻止使用0.75000001之类的值使用整数,并在需要时将其除以4value@Niton使用double也会出现同样的问题。实际上,在游戏/动画中应用double是一种过分的手段。@user3437460您是对的,刚刚测试过,给出的值类似于0.2000000029802224