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という指数表記にならない文字列化が可能となる。
\第一線のプログラマーの行動原理を学べる!/
