添加或减去双打给出错误的结果

adding or substracting doubles gives wrong result

if (CIElchOpposite[2] < 180.0) {
    CIElchOpposite[2] = CIElchOpposite[2] + 180;
} else {
    CIElchOpposite[2] = CIElchOpposite[2] - 180;
}

对于给定的 CIElchOpposite[2] = 82;,return 结果是 180,而它应该是 262

CIELchOppositedouble []

应该很容易,但是怎么操作都不对。
这是整个方法,将 CIELab 颜色映射到 CIELch space,计算相反的颜色(只需添加或减去 180º),然后将其转换回 CIELab。映射已经过独立检查并且工作正常。

double CIElch[] = MapFromCIElabtoCIElch
            .mapLabToLch(inputColorOneCIELAB);
    double CIElchOpposite[] = new double[3];
    CIElchOpposite[0] = CIElch[0];
    CIElchOpposite[1] = CIElch[1];

    if (CIElchOpposite[2] < 180.0) {
        CIElchOpposite[2] = CIElchOpposite[2] + 180;
    } else {
        CIElchOpposite[2] = CIElchOpposite[2] - 180;
    }

    double[] CIElabOpposite = new double[3];
    CIElabOpposite = MapFromCIElabtoCIElch.mapLchToLab(CIElchOpposite);

double 在内部存储为二进制的分数,因此 0.123 之类的值不能用二进制格式表示,这就是算术输出错误的原因

改为使用 BigDecimal BigDecimal bigDecimal = new BigDecimal(b) 做你的哮喘患者,然后 return 如果你愿意,可以将值加倍

bigDecimal.doubleValue()

除此之外 CIElchOpposite[2] 从未被分配过

CIElchOpposite[2] 在 if 语句

之前从未被赋值

也许你的意思是

if (CIElch[2] < 180.0) {
    CIElchOpposite[2] = CIElch[2] + 180;
} else {
    CIElchOpposite[2] = CIElch[2] - 180;
}

注意 Java 使用驼峰式命名,例如 cielchOppositecieLch