Получить мантиссу Java BigDecimal - PullRequest
1 голос
/ 11 марта 2011

Я хочу сделать простую математику с очень маленькими и очень большими числами. Я решил начать с BigDecimal:

scala> java.math.BigDecimal.valueOf(54, 45) 
res0: java.math.BigDecimal = 5.4E-44

Как мне тогда взять мантиссу? Либо 54, либо 5.4 будет в порядке.

1 Ответ

2 голосов
/ 11 марта 2011

BigDecimal.unscaledValue():

BigDecimal bd = BigDecimal.valueOf(54, 45);
System.out.println(bd.unscaledValue()); //prints "54"

Результатом этого метода является BigInteger, поскольку BigDecimal имеет десятичную точность произвольной длины.

Редактировать

Вот самый чистый способ найти другой способ (5.4):

  bd.scaleByPowerOfTen(bd.scale() + 1 - bd.precision());

Это я проверял меньше, но это должно охватывать все случаи. Он масштабирует число таким образом, чтобы не было десятичной дроби (bd.scale()), но затем масштабируется так, чтобы от десятичной точки оставалось только одно число (1 - bd.precision()).

...