это указатель на указатель. например, если * x означает, что он будет содержать адрес некоторой переменной, чем, если я скажу, что m = & amp; x, чем m, отображается как int ** m
используйте bigDecimal.toPlainString () :
BigDecimal bigDecimal = BigDecimal.valueOf(100000.0)
.multiply(BigDecimal.valueOf(100d))
.stripTrailingZeros();
System.out.println("plain : " + bigDecimal.toPlainString());
System.out.println("scientific : " + bigDecimal.toEngineeringString());
выводит:
plain : 10000000 scientific : 10E+6
Точное обоснование поведения BigDecimal.toString ()
объясняется в API doc в мельчайших (и почти непонятных) деталях.
Чтобы получить согласованное (и зависящее от локали) текстовое представление, вы должны использовать DecimalFormat .
Это в основном потому, что у вас недостаточно значащих цифр. Если вы умножите то, что имеет только 1 значащую цифру, на 100, то вы получите что-то, имеющее только 1 значащую цифру. Если он показывает "10", это означает, что он имеет 2 значащих цифры. Чтобы показать, что у него только 1 значащая цифра, нужно показать «1 x 10 ^ 1».
Следующие два десятичных знака имеют одинаковое значение (10), но разные «масштабы» (где они начинают отсчет значащих цифр; вверху есть 2 сиг-фига, внизу - 1):
System.out.println(new BigDecimal(BigInteger.TEN, 0)); // prints 10
System.out.println(new BigDecimal(BigInteger.ONE, -1)); // prints 1E+1