Java 如何将支票转换为包含小数点位置的单词

Java 如何将支票转换为包含小数点位置的单词,java,arrays,string,currency,Java,Arrays,String,Currency,我被指派编写一个方法,该方法的货币值小于$1000.00,并编写与该金额相等的单词。该金额还需要包括小数点后的部分(基本上是金额的变动部分)。 i、 e 我看到这个话题已经被讨论过很多次了,但我似乎找不到任何关于我所要求的信息。我是新来的(4周),所以如果我问错了问题或以错误的方式陈述了我所做的事情,请原谅我。我可以用文字输出金额(正如你从我的结果中看到的),但我相信我遇到的问题在于用户输入了一个Double,我的代码不包括任何请求尝试以下方法: public class CheckToWord

我被指派编写一个方法,该方法的货币值小于$1000.00,并编写与该金额相等的单词。该金额还需要包括小数点后的部分(基本上是金额的变动部分)。
i、 e

我看到这个话题已经被讨论过很多次了,但我似乎找不到任何关于我所要求的信息。我是新来的(4周),所以如果我问错了问题或以错误的方式陈述了我所做的事情,请原谅我。我可以用文字输出金额(正如你从我的结果中看到的),但我相信我遇到的问题在于用户输入了一个Double,我的代码不包括任何请求尝试以下方法:

public class CheckToWord {
    public static void main(String[] args) {  //main method
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please enter the check amount:"); //prompt user to enter check amount

        double number = scanner.nextDouble();
        String[] parsed = parse(Double.toString(number));
        int main = Integer.parseInt(parsed[0]);
        int change = Integer.parseInt(parsed[1]);

        if (main == 0 && change == 0) {
            System.out.print("Zero");
        } else {
            String mwm = moneyWord(main);
            String mwc = moneyWord(change);
            System.out.println("" + mwm + " and " + mwc + " cents");
        }
    }

    private static String[] parse(String number) {
        String[] split = number.contains(".") ? number.split(Pattern.quote(".")) : new String[]{number, "00"};
        String main = split[0];
        String change = split[1].length() >= 2 ? split[1].substring(0, 2) :
                split[1].length() == 1 ? split[1] + "0" : "00";
        return new String[]{main, change};
    }

    private static String moneyWord(int number) {
        if(number > 1000) {
            throw new IllegalArgumentException("Number value should be less than 1000");
        }

        String words = "";  // variable to hold string representation of number
        String onesArray[] = {"zero", "one", "two", "three", "four", "five", "six",
                "seven", "eight", "nine", "ten", "eleven", "twelve",
                "thirteen", "fourteen", "fifteen", "sixteen", "seventeen",
                "eighteen", "nineteen"};
        String tensArray[] = {"zero", "ten", "twenty", "thirty", "forty", "fifty",
                "sixty", "seventy", "eighty", "ninety"};


        if (number < 0) { // convert the number to a string
            String numberStr = "" + number;
            numberStr = numberStr.substring(1);  // remove minus before the number
            return "minus " + moneyWord((int) Double.parseDouble(numberStr));  // add minus before the number and convert the rest of number
        }

        if ((number / 1000) > 0) { // check if number is divisible by 1 thousand
            words += moneyWord(number / 1000) + " thousand ";
            number %= 1000;
        }

        if ((number / 100) > 0) { // check if number is divisible by a hundred
            words += moneyWord(number / 100) + " hundred ";
            number %= 100;
        }

        if (number < 20) { // check if number is within the teens
            words += onesArray[number]; // get the appropriate value from ones array
        } else {
            words += tensArray[number / 10]; // get the appropriate value from tens array
            if ((number % 10) > 0) {
                words += "-" + onesArray[number % 10];
            }
        }
        return words;
    }
}
试试这个:

public class CheckToWord {
    public static void main(String[] args) {  //main method
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please enter the check amount:"); //prompt user to enter check amount

        double number = scanner.nextDouble();
        String[] parsed = parse(Double.toString(number));
        int main = Integer.parseInt(parsed[0]);
        int change = Integer.parseInt(parsed[1]);

        if (main == 0 && change == 0) {
            System.out.print("Zero");
        } else {
            String mwm = moneyWord(main);
            String mwc = moneyWord(change);
            System.out.println("" + mwm + " and " + mwc + " cents");
        }
    }

    private static String[] parse(String number) {
        String[] split = number.contains(".") ? number.split(Pattern.quote(".")) : new String[]{number, "00"};
        String main = split[0];
        String change = split[1].length() >= 2 ? split[1].substring(0, 2) :
                split[1].length() == 1 ? split[1] + "0" : "00";
        return new String[]{main, change};
    }

    private static String moneyWord(int number) {
        if(number > 1000) {
            throw new IllegalArgumentException("Number value should be less than 1000");
        }

        String words = "";  // variable to hold string representation of number
        String onesArray[] = {"zero", "one", "two", "three", "four", "five", "six",
                "seven", "eight", "nine", "ten", "eleven", "twelve",
                "thirteen", "fourteen", "fifteen", "sixteen", "seventeen",
                "eighteen", "nineteen"};
        String tensArray[] = {"zero", "ten", "twenty", "thirty", "forty", "fifty",
                "sixty", "seventy", "eighty", "ninety"};


        if (number < 0) { // convert the number to a string
            String numberStr = "" + number;
            numberStr = numberStr.substring(1);  // remove minus before the number
            return "minus " + moneyWord((int) Double.parseDouble(numberStr));  // add minus before the number and convert the rest of number
        }

        if ((number / 1000) > 0) { // check if number is divisible by 1 thousand
            words += moneyWord(number / 1000) + " thousand ";
            number %= 1000;
        }

        if ((number / 100) > 0) { // check if number is divisible by a hundred
            words += moneyWord(number / 100) + " hundred ";
            number %= 100;
        }

        if (number < 20) { // check if number is within the teens
            words += onesArray[number]; // get the appropriate value from ones array
        } else {
            words += tensArray[number / 10]; // get the appropriate value from tens array
            if ((number % 10) > 0) {
                words += "-" + onesArray[number % 10];
            }
        }
        return words;
    }
}

另一种从全部金额中分离变化的可能性如下

double[]vals={22.451222.01222.972900.98
};
用于(双val:val){
整数=(整数)val;
//得到余数,乘以100,再加上.5进行四舍五入
//在铸造之前。
整数变化=(整数)((val%1)*100+.5);
//如果更改为0,则在适当位置使用xx
System.out.printf(“%7.2f:%5d和%s/100%n”,
瓦尔,
整体
(更改==0)?“xx”
:change+“”);
}

将零钱从全部金额中分离出来的另一种可能性如下

double[]vals={22.451222.01222.972900.98
};
用于(双val:val){
整数=(整数)val;
//得到余数,乘以100,再加上.5进行四舍五入
//在铸造之前。
整数变化=(整数)((val%1)*100+.5);
//如果更改为0,则在适当位置使用xx
System.out.printf(“%7.2f:%5d和%s/100%n”,
瓦尔,
整体
(更改==0)?“xx”
:change+“”);
}

好的,如果我理解正确,您有一个编译错误。发布包含错误的代码。从编译器发布准确完整的错误消息。告诉错误消息所指的代码行。此外,请解释如果需要整数,为什么要求双精度。如果目标是转换dcimal数字,为什么需要整数。1523.23是无效输入,因为该值应小于1000美元。00@MartínZaragoza感谢您这么快的回复。现在我想回去复制错误,以便发布它们。我知道我输入的金额超过1000.00美元,但我想我可能需要说明,用户只输入了少于1k美元的金额。我还将尝试您发布到我的代码中的输入。请继续收看,太好了。进展如何?它对您有用吗?@JBNizet如果我将moneyWord方法中的int number改为Double,则第45、48和50行中的数字表示“类型不匹配:无法从Double转换为int”。但在审查了马丁发布的内容后,问题还不止这些。因为我需要修改代码的所有3个方法以及一个If语句。正如我前面提到的,有一些事情我们还没有涉及,我正试图自己弄清楚,即数组和解析。再次感谢您的帮助。好的,如果我理解正确,您有一个编译错误。发布包含错误的代码。从编译器发布准确完整的错误消息。告诉错误消息所指的代码行。此外,请解释如果需要整数,为什么要求双精度。如果目标是转换dcimal数字,为什么需要整数。1523.23是无效输入,因为该值应小于1000美元。00@MartínZaragoza感谢您这么快的回复。现在我想回去复制错误,以便发布它们。我知道我输入的金额超过1000.00美元,但我想我可能需要说明,用户只输入了少于1k美元的金额。我还将尝试您发布到我的代码中的输入。请继续收看,太好了。进展如何?它对您有用吗?@JBNizet如果我将moneyWord方法中的int number改为Double,则第45、48和50行中的数字表示“类型不匹配:无法从Double转换为int”。但在审查了马丁发布的内容后,问题还不止这些。因为我需要修改代码的所有3个方法以及一个If语句。正如我前面提到的,有一些事情我们还没有涉及,我正试图自己弄清楚,即数组和解析。再次感谢你的帮助。谢谢你的帮助。我得跑了。正如我在上面的评论中提到的,我进入了类-数组和解析中尚未涉及的领域。这是一门在线课程,有点困难,但它开始出现了。谢谢你的帮助。我得跑了。正如我在上面的评论中提到的,我进入了类-数组和解析中尚未涉及的领域。虽然这是一门在线课程,但它已经开始出现了。
Please enter the check amount:
1523.23
one thousand five hundred twenty-three
public class CheckToWord {
    public static void main(String[] args) {  //main method
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please enter the check amount:"); //prompt user to enter check amount

        double number = scanner.nextDouble();
        String[] parsed = parse(Double.toString(number));
        int main = Integer.parseInt(parsed[0]);
        int change = Integer.parseInt(parsed[1]);

        if (main == 0 && change == 0) {
            System.out.print("Zero");
        } else {
            String mwm = moneyWord(main);
            String mwc = moneyWord(change);
            System.out.println("" + mwm + " and " + mwc + " cents");
        }
    }

    private static String[] parse(String number) {
        String[] split = number.contains(".") ? number.split(Pattern.quote(".")) : new String[]{number, "00"};
        String main = split[0];
        String change = split[1].length() >= 2 ? split[1].substring(0, 2) :
                split[1].length() == 1 ? split[1] + "0" : "00";
        return new String[]{main, change};
    }

    private static String moneyWord(int number) {
        if(number > 1000) {
            throw new IllegalArgumentException("Number value should be less than 1000");
        }

        String words = "";  // variable to hold string representation of number
        String onesArray[] = {"zero", "one", "two", "three", "four", "five", "six",
                "seven", "eight", "nine", "ten", "eleven", "twelve",
                "thirteen", "fourteen", "fifteen", "sixteen", "seventeen",
                "eighteen", "nineteen"};
        String tensArray[] = {"zero", "ten", "twenty", "thirty", "forty", "fifty",
                "sixty", "seventy", "eighty", "ninety"};


        if (number < 0) { // convert the number to a string
            String numberStr = "" + number;
            numberStr = numberStr.substring(1);  // remove minus before the number
            return "minus " + moneyWord((int) Double.parseDouble(numberStr));  // add minus before the number and convert the rest of number
        }

        if ((number / 1000) > 0) { // check if number is divisible by 1 thousand
            words += moneyWord(number / 1000) + " thousand ";
            number %= 1000;
        }

        if ((number / 100) > 0) { // check if number is divisible by a hundred
            words += moneyWord(number / 100) + " hundred ";
            number %= 100;
        }

        if (number < 20) { // check if number is within the teens
            words += onesArray[number]; // get the appropriate value from ones array
        } else {
            words += tensArray[number / 10]; // get the appropriate value from tens array
            if ((number % 10) > 0) {
                words += "-" + onesArray[number % 10];
            }
        }
        return words;
    }
}
Please enter the check amount:
10.25
ten and twenty-five cents