new BigDecimal(String)について調べてみた
業務システムでは必須とも言うべきBigDecimalクラス。
今回は、Integer.parseInt(String)、Double.parseDouble(String)に続いてnew BidDecimal(String)を調べてみた。
整数だけでなく、当然小数もparseできる。
new BigDecimal(".1") new BigDecimal("1. ")
もOKだ。
Javadocを見ると、Doubleと同様に指数形式(1.2e+3みたいなやつ)にも対応しているようだ。
System.out.println(new BigDecimal("1.2e+3"));
あれ、「1200」ではなく、そのまま指数形式「1.2E+3」で表示されるなあ。
System.out.println(new BigDecimal("1200"));
これは「1200」と表示される。
scaleを調べてみたら、前者は-2、後者は0だった。
なるほど。指数形式をparseするとscaleにも反映されるのか。
BigDecimalには非数とか無限大はないので、
new BigDecimal("NaN") new BigDecimal("Infinity")
はNumberFormatExceptionになる。
"0x..."のような16進形式にも対応していない。
全角数字はどうだろうか?
System.out.println(new BigDecimal("1234"));
は「1234」と表示された。
BigDecimalのコンストラクタのソースを見ると、ところどころCharacter.isDigit(c)とかCharacter.digit(c, 10)とかあるので、ここで文字を数値に変換しているようだ。
ということは...、やっぱりInteger.parseIntと同様に、
System.out.println(new BigDecimal("൧൨൩൪"));
も正常に「1234」と表示された。
ちなみに、数字以外で全角文字「.」「+」「-」「e」を使うとNumberFormatExceptionになった。
まとめると、Integer.parseIntで通るものは全て通り、小数や指数形式にも対応している、という感じかな。
JDK : 8u31