Antonio
Antonio

Reputation: 239

Is there way to display number in exponent format

I have a large number and I don't want to display it in EditText as for example 1.1E12. I want to display it in format like this: 1.1 x 10^12 (see image). Is there way to do this?

enter image description here

Upvotes: 0

Views: 815

Answers (1)

VGR
VGR

Reputation: 44355

I think you are asking how to generate a string that represents a number in “math textbook” scientific notation, like 6.02214076×10²³.

You can split the number into its base and exponent using Math.log10, then convert the exponent’s digits to Unicode superscript characters:

public static String formatInScientificNotation(double value) {
    NumberFormat baseFormat = NumberFormat.getInstance(Locale.ENGLISH);
    baseFormat.setMinimumFractionDigits(1);

    if (Double.isInfinite(value) || Double.isNaN(value)) {
        return baseFormat.format(value);
    }

    double exp = Math.log10(Math.abs(value));
    exp = Math.floor(exp);

    double base = value / Math.pow(10, exp);

    String power = String.valueOf((long) exp);

    StringBuilder s = new StringBuilder();
    s.append(baseFormat.format(base));
    s.append("\u00d710");

    int len = power.length();
    for (int i = 0; i < len; i++) {
        char c = power.charAt(i);
        switch (c) {
            case '-':
                s.append('\u207b');
                break;
            case '1':
                s.append('\u00b9');
                break;
            case '2':
                s.append('\u00b2');
                break;
            case '3':
                s.append('\u00b3');
                break;
            default:
                s.append((char) (0x2070 + (c - '0')));
                break;
        }
    }

    return s.toString();
}

Upvotes: 2

Related Questions