我是一名初学者程序员,正在编写更改机器程序。我几乎记不清了,但是由于某些原因,Math.floor()给出的结果为0而不是预期的数字。

我尝试使用Math.round()代替,但是我很确定它应该是Math.floor()以获得最准确的结果。

    public void calculateChange(){
        changeTotal = moneyGiven -  total;

        wholeDollars = Math.floor(changeTotal);

        quarters = Math.floor((changeTotal - wholeDollars)/.25);

        dimes = Math.floor(((changeTotal - wholeDollars) - quarters * .25)/.1);

        nickles = Math.floor(((changeTotal - wholeDollars) - quarters * .25 - dimes * 0.1)/.05);

        pennies = Math.floor(((changeTotal - wholeDollars) - quarters * .25 - dimes * 0.1 - nickles * .05)/ .01);
     }


例如,当我运行下面的方法时,输入5​​美元作为现金,1.29美元作为交易总额,我得到的零钱是3美元,2个季度,2个角钱,0个镍币和0个便士。

一分钱的值应该为1。似乎任何给定表达式的结果都应该为1的问题。

最佳答案

首先,您的代码不显示变量的任何数据类型。这使我很难在此处查明问题的确切原因。

除此之外,您的变量需要转换为整数。我已经对您的方法的结构进行了修改; moneyGiventotal现在是float参数。

将方法调用为calculateChange(5, 1.29f)可以为我提供3 2 2 0 1的正确输出。

public static void calculateChange(float moneyGiven, float total) {
    float changeTotal = moneyGiven - total;

    int wholeDollars = (int) Math.floor(changeTotal);

    int quarters = (int) Math.floor((changeTotal - wholeDollars)/.25);

    int dimes = (int) Math.floor(((changeTotal - wholeDollars) - quarters * .25)/.1);

    int nickles = (int) Math.floor(((changeTotal - wholeDollars) - quarters * .25 - dimes * 0.1)/.05);

    int pennies = (int) Math.floor(((changeTotal - wholeDollars) - quarters * .25 - dimes * 0.1 - nickles * .05)/.01);

    System.out.println(wholeDollars + " " + quarters + " " + dimes + " " + nickles + " " + pennies);
 }

关于java - 我的使用Math.floor()的Java数学表达式的结果为0,而不是预期的数字,即使我的纸面计算表明应该相反,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58251323/

10-09 01:40