我是一名初学者程序员,正在编写更改机器程序。我几乎记不清了,但是由于某些原因,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的问题。
最佳答案
首先,您的代码不显示变量的任何数据类型。这使我很难在此处查明问题的确切原因。
除此之外,您的变量需要转换为整数。我已经对您的方法的结构进行了修改; moneyGiven
和total
现在是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/