BigDecimalをtoStringすると指数表記に場合がある

BigDecimalをtoStringすると指数表記になる場合がある。

BigDecimal b = new BigDecimal("0.00000000012345");
String value = b.toString();
System.out.println(value); // 1.2345E-10

上記プログラムでは0.00000000012345を文字列としてBigDecimalに渡しているが、toString()で文字列化すると1.2345E-10という指数表記になっている。

指数表記にならない文字列化(toPlainString)

BigDecimalの文字列化で指数表記とならないようにするにはtoPlainString()を使う。

BigDecimal b = new BigDecimal("0.00000000012345");
String value = b.toPlainString();
System.out.println(value); // 0.00000000012345

先述のプログラムのtoString()toPlainString()に変更すると0.00000000012345という指数表記にならない文字列化が可能となる。

整数もstripTrailingZeros()で指数表記になる場合がある

整数値の場合でもstripTrailingZeros()を使うと指数表記になる場合がある。

BigDecimal b = new BigDecimal("10000").stripTrailingZeros();
String value = b.toString();
System.out.println(value); // 1E+4

上記では10000を文字列としてBigDecimalに渡し、stripTrailingZeros()を使った後にtoString()で文字列化している。
この場合も1E+4という指数表記になる。

この場合でもtoPlainString()を使うと指数表記にならない。

BigDecimal b = new BigDecimal("10000").stripTrailingZeros();
String value = b.toPlainString();
System.out.println(value); // 10000

上記プログラムのtoString()toPlainString()に変更すると10000という指数表記にならない文字列化が可能となる。