在 Java 中分隔小数值
Separating decimal value in Java
所以我正在构建一个程序,我用不同的硬币打印出美元和美分的价值。因为我需要每个都是整数,所以我做了一些编码来实现它。我的问题是,在某些情况下,当程序 运行 时,我的美分值出现错误。其他一切都是正确的。我假设这与转换为整数有关,并导致它在给出某些用户输入时不舍入。例如,当我输入 10 个 25 美分、3 个角钱、6 个镍币和 2 个便士时,结果最后是 11 美分。我无法找出这里的错误。
我的完整代码如下。谁能告诉我我做错了什么?
public static void main (String[]args){
Scanner sc=new Scanner(System.in);
System.out.print("Enter the number of quarters: ");
double qs=sc.nextDouble();
System.out.print("Enter the number of dimes: ");
double ds=sc.nextDouble();
System.out.print("Enter the number of nickels: ");
double ns=sc.nextDouble();
System.out.print("Enter the number of pennies: ");
double ps=sc.nextDouble();
System.out.print("\n");
double qV=0.25;
double dV=0.10;
double nV=0.05;
double pV=0.01;
double tQ=qs*qV, tD=ds*dV, tN=ns*nV, tP=ps*pV;
double totalV=tQ+tD+tN+tP;
int dollars=(int)totalV;
double cent=(totalV-dollars)*100;
int cents=(int)cent;
int tqs=(int)qs;
int tds=(int)ds;
int tns=(int)ns;
int tps=(int)ps;
System.out.println("You entered "+tqs+" quarters.");
System.out.println("You entered "+tds+" dimes.");
System.out.println("You entered "+tns+" nickels.");
System.out.println("You entered "+tps+" pennies.");
System.out.print("\n");
System.out.println("Your total is "+dollars+" dollars and "+cents+" cents.");
}
美好的一天,
得到你想要的东西的正确方法是使用 Math.round() 方法:
int cents= (int) Math.round(cent);
我会对您的美元价值采用相同的方法。您可能会阅读有关 IEEE 754 计算的更多信息,这里有一个很好的解释,很好地解释了幕后发生的事情 -
根本不要使用 double
。
金币数量始终为整数。用int
表示一个整数。
如果按分来计算,金额可以是整数。使用 int
.
System.out.print("Enter the number of quarters: ");
int qs=sc.nextInt();
… etc …
int total = 25*qs + 10*ds + 5*ns + ps;
现在的美金数是美分总数除以100,美分数是总数除以100的余数。
int dollars = total / 100;
int cents = total % 100;
System.out.println("Your total is " + dollars + " dollars and "
+ cents + " cents.");
这比必须进行转换要简单得多,而且算法总是准确的。
所以我正在构建一个程序,我用不同的硬币打印出美元和美分的价值。因为我需要每个都是整数,所以我做了一些编码来实现它。我的问题是,在某些情况下,当程序 运行 时,我的美分值出现错误。其他一切都是正确的。我假设这与转换为整数有关,并导致它在给出某些用户输入时不舍入。例如,当我输入 10 个 25 美分、3 个角钱、6 个镍币和 2 个便士时,结果最后是 11 美分。我无法找出这里的错误。
我的完整代码如下。谁能告诉我我做错了什么?
public static void main (String[]args){
Scanner sc=new Scanner(System.in);
System.out.print("Enter the number of quarters: ");
double qs=sc.nextDouble();
System.out.print("Enter the number of dimes: ");
double ds=sc.nextDouble();
System.out.print("Enter the number of nickels: ");
double ns=sc.nextDouble();
System.out.print("Enter the number of pennies: ");
double ps=sc.nextDouble();
System.out.print("\n");
double qV=0.25;
double dV=0.10;
double nV=0.05;
double pV=0.01;
double tQ=qs*qV, tD=ds*dV, tN=ns*nV, tP=ps*pV;
double totalV=tQ+tD+tN+tP;
int dollars=(int)totalV;
double cent=(totalV-dollars)*100;
int cents=(int)cent;
int tqs=(int)qs;
int tds=(int)ds;
int tns=(int)ns;
int tps=(int)ps;
System.out.println("You entered "+tqs+" quarters.");
System.out.println("You entered "+tds+" dimes.");
System.out.println("You entered "+tns+" nickels.");
System.out.println("You entered "+tps+" pennies.");
System.out.print("\n");
System.out.println("Your total is "+dollars+" dollars and "+cents+" cents.");
}
美好的一天,
得到你想要的东西的正确方法是使用 Math.round() 方法:
int cents= (int) Math.round(cent);
我会对您的美元价值采用相同的方法。您可能会阅读有关 IEEE 754 计算的更多信息,这里有一个很好的解释,很好地解释了幕后发生的事情 -
根本不要使用 double
。
金币数量始终为整数。用int
表示一个整数。
如果按分来计算,金额可以是整数。使用 int
.
System.out.print("Enter the number of quarters: ");
int qs=sc.nextInt();
… etc …
int total = 25*qs + 10*ds + 5*ns + ps;
现在的美金数是美分总数除以100,美分数是总数除以100的余数。
int dollars = total / 100;
int cents = total % 100;
System.out.println("Your total is " + dollars + " dollars and "
+ cents + " cents.");
这比必须进行转换要简单得多,而且算法总是准确的。