Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中排序更改为小数的问题_Java - Fatal编程技术网

java中排序更改为小数的问题

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

您好,我需要帮助将零钱分类为小数,如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.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
因此,四分之一应该是25,一角硬币应该是10,五分之一镍应该是5

还要改变这一点:

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,您期望的逻辑是什么?顺便说一句,这等于长四分之一=余数*4one
等于
rements/100
那么就不会
quarters
等于
rements/25
?是的,听起来不错。我来试试,谢谢,是浮动的还是双人的?我把这两个都放在季度,如果金额应该用美分来衡量(这似乎是您的代码所期望的),那么就不需要加倍,因为不可能有一分钱。所以long(或int,取决于您的代码应该支持的最大数量)是正确的-不需要浮点表示。所以我应该将amount和rements作为int或long?如果
rements
是以美分为单位的,并且无法得到美分的小数,那么就不需要浮点或双精度。