Java 方法使用 int 而不是 double

Java method working with an int but not a double

当我使用 142.14 调用该方法时,我没有收到任何错误,但控制台上根本没有任何输出。当我发送 142 时,它按预期工作。为什么是这样? 此代码在 Java 中,我需要添加更多详细信息才能提出这个问题,所以我在这里添加更多详细信息。

public class Testing {
    static int twentyCount = 0;
    static int tenCount = 0;
    static int fiveCount = 0;
    static int dollarCount = 0;
    static int quarterCount = 0;
    static int dimeCount = 0;
    static int nickelCount = 0;
    static int pennyCount = 0;
    
    public static void main(String[] args) {
        
        returnChange(142.14);
    }
    
public static void returnChange(double change) {
        
    
        while (change >= 1.0) {
            if(change >= 20.0) {
                change = change - 20.0;
                twentyCount++;
                continue;
            } if(change >= 10.0) {
                change = change - 10.0;
                tenCount++;
                continue;
            } if(change >= 5.0) {
                change = change - 5.0;
                fiveCount++;
                continue;
            } if(change >= 1.0) {
                change = change - 1.0;
                dollarCount++;
                continue;
            }
        }
        while (change != 0.0) {
            if(change >= .25) {
                change = change - .25;
                quarterCount++;
                continue;
            } if(change >= .1) {
                change = change - .1;
                dimeCount++;
                continue;
            } if(change >= .05) {
                change = change - .05;
                nickelCount++;
                continue;
            } if(change >= .01) {
                change = change - .01;
                pennyCount++;
                continue;
            }
        }
    System.out.println("Change dispensed:  " + twentyCount + " 20's, " + tenCount + " 10's, " + fiveCount + " 5's, "
                + dollarCount + " 1's, " + quarterCount + " quarters, " + dimeCount + " dimes, "
                + nickelCount + " nickels, and " + pennyCount + " pennies.");
    }
    

}

考虑一下。变化可以是 .009999,因此不会被任何条件更新。并且它也将不等于 0.0。所以它将永远运行。所以在这种情况下,做:

while (change >= .01) // the smallest value you care about.
     ...
     ...
     ...
    } if(change >= .01) {
        change = change - .01;
        pennyCount++;
        continue;
    }
}

它仍然会更新美分并正常退出。在未来的情况下,要么以分表示您的钱(例如 143.14 is 14314 cents),要么使用 BigDecimal 进行计算。一般情况下,不要使用双倍的金钱价值。