Как преобразовать чек в слова, которые также включают десятичную позицию - PullRequest
1 голос
/ 01 декабря 2019

Мне было дано задание написать метод, который принимает денежную стоимость менее 1000 долларов и записывает слово, эквивалентное этой сумме. Эта сумма должна включать часть после десятичной дроби (по существу, часть изменения суммы).
т.е.

Enter·check·amount:567.89↵
five·hundred·sixty·seven·and·89/100↵

Я вижу, что тема освещалась много раз, но я не могуКажется, я нашел любую информацию о том, что я запрашиваю. Я новичок в этом (4 недели), так что прости меня, если я задаю неправильные вопросы или констатирую, что я сделал неправильно. Я могу вывести сумму словами (как вы можете видеть из моего результата), но я считаю, что проблема, с которой я сталкиваюсь, заключается в том, что пользователь вводит Double, и мой код не содержит ничего, запрашивающего <1000,00. Мой основной метод включает в себя двойное число, но каждый раз, когда я пытаюсь изменить тип Int в методе moneyWord на Double, число Int в моих операторах If указывает, что int нельзя преобразовать в Double (что я знаю). Кроме того, я думаю, что в моем заявлении о возврате может потребоваться дополнительная информация. Опять же, я могу искать ошибку в неправильном направлении, но я верю, что именно здесь я ошибаюсь. Кроме того, я думаю, что некоторые из этих материалов могут преподаваться в классах будущих, как я должен был смотреть на главы в моем учебнике, которые еще не были охвачены, а именно - Массивы. Вот мой кодМы будем благодарны за любую помощь </p>

//program to write the word equivalent of a check amount
import java.util.Scanner;

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

        if (number == 0) {
            System.out.print("Zero");
        } else {
            System.out.print("" + moneyWord((int) number)); // output amount in words
        }
    }

    private static String moneyWord(int number) {
        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:
1523.23
one thousand five hundred twenty-three

1 Ответ

0 голосов
/ 01 декабря 2019

Попробуйте это:

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
...