Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What variable type can I use to hold huge numbers (30+ digits) in java?

Tags:

Is there a really large variable type I can use in Java to store huge numbers (up to around forty digits)?

long's maximum value is 9223372036854775807, which is 19 digits -- not nearly large enough.

I'm trying to create a calculator that can handle large numbers, because most nowadays can only hold an insufficient 10 digits or so, and I want want accurate calculations with numbers of a much larger magnitude

EDIT

Thanks for the answers. I can use BigInteger for big integers, the only limit being the computer's memory (should be sufficient). For decimals, I'll use float ^e, as @WebDaldo suggested, or BigDecimal (similar to BigInteger), as @kocko suggested.

like image 692
Jonathan Lam Avatar asked Aug 26 '13 12:08

Jonathan Lam


People also ask

How do you input a large number in Java?

Use the static valueOf method to turn an ordinary number into a big number: BigInteger a = BigInteger. valueOf(100);

How many digits can long hold Java?

Long can store 10 digit easily. Long phoneNumber = 1234567890; It can store more than that also. This means it can store values of range 9,223,372,036,854,775,807 to -9,223,372,036,854,775,808.


1 Answers

You can use BigInteger class.

BigInteger bi1 = new BigInteger("637824629384623845238423545642384"); 
BigInteger bi2 = new BigInteger("3039768898793547264523745379249934"); 

BigInteger bigSum = bi1.add(bi2);
        
BigInteger bigProduct = bi1.multiply(bi2);
       
System.out.println("Sum : " + bigSum);
System.out.println("Product : " + bigProduct);

Output:

Sum : 3677593528178171109762168924892318

Product : 1938839471287900434078965247064711159607977007048190357000119602656

I should mention BigDecimal, which is excellent for amount calculations compare to double.

BigDecimal bd = new BigDecimal("123234545.4767");
BigDecimal displayVal = bd.setScale(2, RoundingMode.HALF_EVEN);

NumberFormat usdFormat = NumberFormat.getCurrencyInstance(Locale.US);        
System.out.println(usdFormat.format(displayVal.doubleValue()));

Output:

$123,234,545.48

like image 160
Sajal Dutta Avatar answered Oct 24 '22 17:10

Sajal Dutta