Jesus
Jesus

Reputation: 1

Formating big numbers in Java

I have an edittext with a maxlength

My question is...

How can I display the value of a bigger number than the maxlenght like the windows calc??

Example:

1.34223423423434e+32 

I want this with the edittext maxlength

EDIT: I want this for display and store numbers without having problems with math operations if it's possible

Thanks

Upvotes: 0

Views: 135

Answers (1)

Andrzej Doyle
Andrzej Doyle

Reputation: 103847

This is what the BigInteger class (or BigDecimal, for non-integers) is for.

These classes store numbers with arbitrary precision, and allow for standard arithmetic operations. You can get the exact value of the number as a string, and then format that as you wish (e.g. trimming the length).

(Note that while it may seem like you can use these classes with a NumberFormat instance, this is not recommended as accuracy will be silently lost if the number doesn't fit into a double.)

Here's an example of using it:

// Create a BigDecimal from the input text
final String numStr = editText.getValue(); // or whatever your input is
final BigDecimal inputNum = new BigDecimal(numStr);

// Alternatievly you could pass a double into the BigDecimal constructor,
// though this might already lose precison - e.g. "1.1" cannot be represented
// exactly as a double.  So the String constructor is definitely preferred,
// especially if you're using Double.parseDouble somewhere "nearby" as then
// it's a drop-in replacement.

// Do arithmetic with it if needed:
final BigDecimal result = inputNum.multiply(new BigDecimal(2));

// Print it out in standard scientific format
System.out.println(String.format("%e", result));

// Print it out in the format you gave, i.e. scientific with 14dp
System.out.println(String.format("%.14e", result));

// Or do some custom formatting based on the exact string value of the number
final String resultStr = result.toString();
System.out.println("It starts with " + result.subString(0, 3) + "...");

I'm not sure exactly what format you wanted for output, but whatever it is you should be able to manage it with BigDecimals as the backing store.

Upvotes: 3

Related Questions