gpt4 book ai didi

java - 更改程序无法使用 1.16 美元

转载 作者:行者123 更新时间:2023-12-02 05:28:09 25 4
gpt4 key购买 nike

该程序除了 1.16 美元外都进行了更改,为什么处理不正确?

public class Change {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Enter Change: ");
double change = in.nextDouble()*100;
int dollars = Math.round((int)change/100);
change=change%100;
int quarters = Math.round((int)change/25);
change=change%25;
int dimes = Math.round((int)change/10);
change=change%10;
int nickels = Math.round((int)change/5);
change=change%5;
int pennies = Math.round((int)change/1);

System.out.println("Dollars: " + dollars);
System.out.println("Quarters: " + quarters);
System.out.println("Dimes: " + dimes);
System.out.println("Nickels: " + nickels);
System.out.println("Pennies: " + pennies);
}
}

我认为这是一个截断问题,因为当我在下面的代码中使用 .9 时它可以工作:

int pennies = Math.round((int)change/.9);

最佳答案

问题是变化是双重的。当我运行它时,我在便士声明之前打印了零钱,这就是打印的内容:0.9999999999999858。当它转换为 int 时,它会变成 0。所以 0/1 是 0。不要对 double 使用模数除法。当您输入 1.16 时,它将返回 1.1599999999999999999999999999999。尝试将输入向上舍入。

        Scanner in = new Scanner(System.in);
System.out.println("Enter Change: ");
int change = (int)(Math.ceil(in.nextDouble()*100));
int dollars = Math.round((int)change/100);
change=change%100;
int quarters = Math.round((int)change/25);
change=change%25;
int dimes = Math.round((int)change/10);
change=change%10;
int nickels = Math.round((int)change/5);
change=change%5;
int pennies = Math.round((int)change/1);

System.out.println("Dollars: " + dollars);
System.out.println("Quarters: " + quarters);
System.out.println("Dimes: " + dimes);
System.out.println("Nickels: " + nickels);
System.out.println("Pennies: " + pennies);

此代码有效。

关于java - 更改程序无法使用 1.16 美元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25793536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com