Как конвертировать BigDecimal в экспоненциальную форму? - PullRequest
2 голосов
/ 21 февраля 2012

Как преобразовать объект BigDecimal в представление String, которое использует экспоненциальную форму? что-то вроде: 3.134e67? Я посмотрел в API и нашел toEngineeringString(), но он не дает мне то, что я хочу.

Ответы [ 3 ]

6 голосов
/ 21 февраля 2012

Читали ли вы документацию NumberFormat, это из DecimalFormat: См .: http://docs.oracle.com/javase/1.4.2/docs/api/java/text/DecimalFormat.html

Научная запись

Числа в научной записи выражаются какпроизведение мантиссы и степени десяти, например, 1234, может быть выражено как 1,234 x 10 ^ 3.Мантисса часто находится в диапазоне 1,0 <= х <10,0, но это не обязательно.DecimalFormat может быть задан для форматирования и анализа научной нотации только через шаблон;в настоящее время нет фабричного метода, который бы создавал формат научной нотации.В шаблоне знак экспоненты, за которым сразу следует один или несколько цифр, обозначает научное обозначение.Пример: «0. ### E0» форматирует число 1234 как «1.234E3». </p>

  • Количество цифр после знака экспоненты дает минимальное число экспонент.Там нет максимума.Отрицательные показатели отформатированы с использованием локализованного знака минус, а не префикса и суффикса из шаблона.Это позволяет использовать такие шаблоны, как «0. ### E0 m / s».

  • Минимальное и максимальное количество целых чисел интерпретируются вместе:

    • Если максимальное количество целых цифр больше, чем их минимальное число и больше 1, это означает, что показатель степени кратен максимальному количеству целых цифр, а минимальное количество целых цифр должно интерпретироваться как 1.Чаще всего это используется для создания инженерной нотации, в которой показатель степени кратен трем, например, "## 0. ##### E0".Используя этот шаблон, число 12345 форматируется до «12.345E3», а 123456 форматируется до «123.456E3».

    • В противном случае минимальное количество целых цифр достигается путем корректировки показателя степени.Пример: 0,00123, отформатированный с «00. ### E0», дает «12,3E-4».

  • Количество значащих цифр в мантиссе является суммой минимальных целых и максимальных дробных цифр и не зависит от максимальных целых цифр.Например, 12345, отформатированный с "## 0. ## E0", равен "12.3E3".Чтобы показать все цифры, установите количество значащих цифр в ноль.Количество значащих цифр не влияет на синтаксический анализ.

  • Экспоненциальные шаблоны могут не содержать разделителей группировки.

2 голосов
/ 21 февраля 2012

Вам это помогает?

BigDecimal bd = new BigDecimal(3.134e67);
String.valueOf(bd.doubleValue())
0 голосов
/ 21 февраля 2012

Вы ищете что-то подобное?

ГГ ^ XX (мод QQ)

int fastMod(int YY, int XX, int QQ){
    int ZZ;                                             //declare variables
    int RR = 1;

    while (XX != 0){                                    //while XX != 0
        ZZ = XX % 2;                                    //mod XX by 2
        XX= XX/2;                                       //divide XX by 2
        if (ZZ == 1)                                    //if ZZ is one
        RR = (RR * YY) % QQ;                            //mod (RR*YY) by QQ
        YY= (YY * YY) % QQ;                             //mod (YY*YY) by QQ     
    }
    return RR;                                          //return int
}

Когда вы начнете использовать числа GIANT, вам нужно будет использовать модульную арифметику. Это становится особенно полезным при генерации больших простых чисел, как в алгоритме RSA. Основы модульной арифметики освещены здесь: http://www.brainjammer.com/math/modular-arithmetic/

...