java中排序更改为小数的问题
您好,我需要帮助将零钱分类为小数,如25美分、便士、镍币等。上面说可能是有损转换。这是我的密码:java中排序更改为小数的问题,java,Java,您好,我需要帮助将零钱分类为小数,如25美分、便士、镍币等。上面说可能是有损转换。这是我的密码: public class Assignment04 { public static void main(String[] args) { Scanner stdin = new Scanner(System.in); System.out.println("Enter your amount"); long amount = stdin.nex
public class Assignment04 {
public static void main(String[] args) {
Scanner stdin = new Scanner(System.in);
System.out.println("Enter your amount");
long amount = stdin.nextLong();
long remainder = Math.round(amount * 100 );
long hundreds = (int) remainder / 10000;
remainder = remainder % 10000;
long fifties = (int) remainder / 5000;
remainder = remainder % 5000;
long twenties = (int)remainder / 2000;
remainder = remainder % 2000;
long tens = (int)remainder / 1000;
remainder = remainder % 1000;
long fives = (int)remainder / 500;
remainder = remainder % 500;
long ones = (int)remainder / 100;
remainder = remainder % 100;
long quarters = remainder / .25;
remainder = remainder % .25;
long dimes = (int)remainder / .10;
remainder = remainder % .10;
long nickels = (int)remainder / .5;
remainder = remainder % .5;
double pennies = (int) remainder;
System.out.println(hundreds + "hundred/s");
System.out.println(fifties + "fiftie/s");
System.out.println(twenties + "twentie/s");
System.out.println(tens + "ten/s");
System.out.println(fives + "five/s");
System.out.println(ones + "one/s");
System.out.println(quarters + "quarter/s");
System.out.println(dimes + "dime/s");
System.out.println(nickels + "nickel/s");
System.out.println(pennies + "cent/s");
}
}
我正试图找出如何删除红色下划线,以便正确运行。我基本上已经完成了,但当涉及到小数时,我感到困惑。您的余数字段似乎是用美分表示的
- 100美元=10000美元
- $20=2000
- $1=100
double pennies = (int) remainder;
为此:
long pennies = remainder;
修复扫描仪输入的数量,并删除最终存储在长格式中的所有行的转换为(int):
public class Assignment04 {
public static void main(String[] args) {
Scanner stdin = new Scanner(System.in);
System.out.println("Enter your amount");
long remainder = Math.round(stdin.nextDouble() * 100 );
long hundreds = remainder / 10000;
remainder = remainder % 10000;
long fifties = remainder / 5000;
remainder = remainder % 5000;
long twenties = remainder / 2000;
remainder = remainder % 2000;
long tens = remainder / 1000;
remainder = remainder % 1000;
long fives = remainder / 500;
remainder = remainder % 500;
long ones = remainder / 100;
remainder = remainder % 100;
long quarters = remainder / 25;
remainder = remainder % 25;
long dimes = remainder / 10;
remainder = remainder % 10;
long nickels = remainder / 5;
remainder = remainder % 5;
long pennies = remainder;
System.out.println(hundreds + "hundred/s");
System.out.println(fifties + "fiftie/s");
System.out.println(twenties + "twentie/s");
System.out.println(tens + "ten/s");
System.out.println(fives + "five/s");
System.out.println(ones + "one/s");
System.out.println(quarters + "quarter/s");
System.out.println(dimes + "dime/s");
System.out.println(nickels + "nickel/s");
System.out.println(pennies + "cent/s");
}
}
我通过将金额和余数转换为双精度来修复它。您可以使用int。而不是长的。我希望这有帮助。谢谢
Scanner stdin = new Scanner(System.in);
int amount;
int remainder;
System.out.print("Enter amount:");
amount= (int) Math.round(stdin.nextDouble() * 100);
int hundreds= remainder / 1000;
if (hundreds > 0) {
remainder = remainder% 1000;
System.out.println(hundreds + "hundred/s");
}
int fifties = remainder / 1000;
if (fifties > 0) {
remainder = remainder% 1000;
System.out.println(fifties + "fiftie/s");
}
// number of twenties for remainder.
int twenties = change / 2000
if (twenties > 0) {
remainder= remainder % 2000; // this resets the value of remainder to
// the remainder after the twenties are
// calculated but only if there was at
// least enough to make one twenty
System.out.println(twenties + "twentie/s");
}
int tens = remainder / 1000;
if (tens > 0) {
remainder = remainder% 1000;
System.out.println(tens + " ten/s");
}
int fives = remainder/ 500;
if (fives > 0) {
remainder= remainder% 500;
System.out.println(fives + " five/s");
}
int ones = remainder/ 100;
if (ones > 0) {
remainder = remainder % 100;
System.out.println(ones + " one/s");
}
int quarters = remainder/ 25;
if (quarters > 0) {
remainder= remainder% 25;
System.out.println(quarters + " quarter/s");
}
int dimes = remainder/ 10;
if (dimes > 0) {
remainder = remainder % 10;
System.out.println(dimes + " dime/s");
}
int nickels = remainder/ 5;
if (nickels > 0) {
remainder= change % 5;
System.out.println(nickels + " nickel/s");
}
int pennies = remainder;
System.out.println(pennies + " cent/s");
}
}
对于
longquarters=rements/.25,您期望的逻辑是什么代码>?顺便说一句,这等于长四分之一=余数*4但是我不认为这是你想要的。所以当我把/.25放进去的时候,这意味着我基本上是乘以*4。在这种情况下,余数/4有效吗?对不起,不是我的货币,但假设one
等于rements/100
那么就不会quarters
等于rements/25
?是的,听起来不错。我来试试,谢谢,是浮动的还是双人的?我把这两个都放在季度,如果金额应该用美分来衡量(这似乎是您的代码所期望的),那么就不需要加倍,因为不可能有一分钱。所以long(或int,取决于您的代码应该支持的最大数量)是正确的-不需要浮点表示。所以我应该将amount和rements作为int或long?如果rements
是以美分为单位的,并且无法得到美分的小数,那么就不需要浮点或双精度。