Как обрезать / округлить большие числа BigDecimal, чтобы они были в экспоненциальном представлении

Я делаю калькулятор на Java, где я могу отображать только до 17 символов, поэтому . считается символом, а E15 считается 3-значным.

Я тщательно исследовал этот сайт, но не смог найти такой вопрос ... (извините, если есть дубликат)

Как я могу заставить сказать большое BigDecimal, например 9999998990000001, на что-то вроде 9.999998990000E15.

Я не хочу, чтобы это всегда было в научном формате, поэтому цифры, говорящие о длине менее 16 символов, не должны использоваться в научном представлении.

По сути, как портативный калькулятор, если у вас проблемы с пониманием.


person HyongMinLee    schedule 27.12.2017    source источник
comment
Если вы установите точность с помощью MathContext, решит ли это вашу проблему?   -  person Sash Sinha    schedule 27.12.2017


Ответы (1)


Вы можете просто проверить, меньше ли числа 16 символов, если не просто:

private static String formatNumber(BigDecimal bDecimal, int scaleInt) {
  NumberFormat nFromatter = new DecimalFormat("0.0E0");
  nFromatter.setRoundingMode(RoundingMode.HALF_UP);
  nFromatter.setMinimumFractionDigits(scaleInt);
  return formatter.format(bDecimal);
}

System.out.println(formatNumber(new BigDecimal("0.00001"), 2)); 
// Output will be 1.00E-5
System.out.println(formatNumber(new BigDecimal("0.00001"), 3)); 
// Output will be 1.000E-5
person ZetaPR    schedule 27.12.2017