Есть ли способ отображать число в экспоненциальном формате - PullRequest
0 голосов
/ 08 мая 2020

У меня большое число, и я не хочу отображать его в EditText, например 1.1E12. Я хочу отобразить его в таком формате: 1.1 x 10 ^ 12 (см. Изображение). Есть ли способ сделать это?

enter image description here

1 Ответ

2 голосов
/ 08 мая 2020

Думаю, вы спрашиваете, как сгенерировать строку, представляющую число в научной нотации «учебника математики» c, например, 6.02214076 × 10²³.

Вы можете разделить число на основание и экспоненту, используя Math.log10 , затем преобразовать цифры экспоненты в символы надстрочного индекса Unicode:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...