Если вы хотите выполнять математические операции с большими числовыми значениями без переполнения, попробуйте класс BigDecimal.
Допустим, я хочу умножить
200 000 000 * 2 000 000 000 000 000 000L * 20 000 000
int testValue = 200000000;
System.out.println("After Standard Multiplication = " +
testValue *
2000000000000000000L *
20000000);
Значение операции будет -4176287866323730432, что неверно.
Используя класс BigDecimal, вы можете исключить отброшенные биты и получить правильный результат.
int testValue = 200000000;
System.out.println("After BigDecimal Multiplication = " +
decimalValue.multiply(
BigDecimal.valueOf(2000000000000000000L).multiply(
BigDecimal.valueOf(testValue))));
После использования BigDecimal умножение возвращает правильный результат, который равен
80000000000000000000000000000000000