此刻,我的代码如下所示:

if (!flipped){
    scaleX -= 0.1;
    if (scaleX < 0.0001){
      sounds.playSound("flick");
      flipped = true;
   }
 }


这是我想要的样子:

if (!flipped){
    scaleX -= 0.1;
    if (scaleX == 0){
      sounds.playSound("flick");
      flipped = true;
   }
 }


我该如何实现?因为double值(scaleX)从不实际为0。

最佳答案

您想要定义某种公差,然后执行以下操作:

if (Math.abs(scaleX) < tolerance)


您不应该检查该值是否正好为零-只是“足够接近零”。这只是二进制浮点类型的一种生活方式……在二进制浮点中无法精确表示“ 0.1”和“ 0.0001”之类的东西,这就是您遇到这种情况的原因。

目前尚不清楚为什么您不喜欢原始代码,以及为什么希望它成为第二种形式。除了不取绝对值外,第一个代码对我来说还不错。 (我提取了常量,但这是另一回事。)

关于java - 如何避免条件条件中 double 值的舍入误差?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6910131/

10-13 05:26