简体   繁体   中英

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM