Как сделать так, чтобы моя программа получала от небольших до обширных, больших чисел > 2,14 миллиарда

#java

Вопрос:

В настоящее время я кодирую программу, которая преобразует число в формат word, и до сих пор я написал код, который принимает только максимальное значение целого числа (2,14 миллиарда). Мне было интересно, как бы я расширил возможности программы, чтобы принимать большие числа.

(Отредактировано): Я преобразовал все свои значения int в длинные типы данных. Мне удалось увеличить ограничение с 2,14 до 999 миллиардов, хотя не должно ли максимальное значение длинного типа данных составлять 9 квинтиллионов?

Код преобразователя:

 
public class Converter {

    public static WordList wordFormat = new WordList();

    public static final void converter(long value) {

        long valueSize = String.valueOf(value).length();

        String[] output = new String[(int) valueSize];

        long outputSize = output.length;
        long tracker = 1;
        long commasCTR = 0;
        long preValHolder = 0;

        // Returns "Zero" if value = 0
        if (value == 0) {
            System.out.println("Zero");
            return;
        };

        // Self-made Conversion Method
        for (long valHolder = value, placeVal = 0; placeVal <= outputSize - 1; placeVal  , tracker  ) {

            long remainder = valHolder % 10;
            long nextDigit = valHolder / 10 % 10;
            valHolder = valHolder / 10;
            // Num to Word Conditional Statements
            switch ((int) tracker) {
                case 1: 
                    if (placeVal == 0) {
                        output[(int) placeVal] = WordList.wordFormat[0][(int) remainder]; // Ones
                    } else {
                        output[(int) placeVal] = WordList.wordFormat[0][(int) remainder].concat(" "   WordList.commas[(int) commasCTR]); // Commas
                        commasCTR  ;
                    }
                    break;
                case 2: 
                    if (remainder == 1) { // Teens
                        output[(int) placeVal] = WordList.wordFormat[1][(int) preValHolder   1];
                        if (placeVal < 3) output[(int) placeVal - 1] = " ";
                        else output[(int) placeVal - 1] = WordList.commas[(int) commasCTR - 1];
                    } else if (placeVal > 3 amp;amp; preValHolder == 0 amp;amp; remainder == 0 amp;amp; nextDigit == 0) { // Comma Zero Value Handler
                        output[(int) placeVal - 1] = " ";
                        output[(int) placeVal] = WordList.wordFormat[2][(int) remainder];
                    } else {
                        output[(int) placeVal] = WordList.wordFormat[2][(int) remainder]; // Decades
                    }
                    break;
                case 3: 
                    output[(int) placeVal] = WordList.wordFormat[3][(int) remainder]; // Hundredths
                    break;
            }
            // Re-assigning Values
            if (tracker == 3) tracker = 0;
            preValHolder = remainder;
        }
        for (long i = outputSize - 1; i >= 0; i--) {
            if (output[(int) i] == " ") continue;
            System.out.print(output[(int) i].trim()   " ");
        }
        return;
    }
}
}```
 

Ответ №1:

Я думаю, вы могли бы использовать BigInteger https://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html

Комментарии:

1. Я пробовал раньше, хотя у меня было много препятствий с кодом из-за того, что переменные не могли быть преобразованы, сравнены и т. Д. с большим специалистом.

2. Вы можете использовать долго, но у него также есть верхний предел

3. Я попытался преобразовать все мои целочисленные значения в длинный тип данных и набрал некоторые из них в целое число, до сих пор мне удавалось увеличить ограничение с 2,14 до 999 миллиардов. Хотя, по данным Google, максимальное значение длинного типа данных составляет 9 квинтиллионов. Почему это?

4. Я думаю, что исправил свою проблему. Позже я понял, что мой массив для запятых был ограничен только миллиардом, поэтому я также увеличил его, и теперь он исправлен! Спасибо