BigDecimalのコンストラクタに文字列を渡す

BigDicimalのコンストラクタに渡す引数に、なぜ間にStringをかませるのか。今日教えてもらって納得したつもりになったんだけど、家に帰ってみるとまだ分かってなかった。解答に示されたコードは以下の通り。

double num = Math.random();
BigDecimal bd = new BigDecimal(String.valueOf(num));

今日教えてもらったことについて、以下のコード。

BigDecimal bd = new BigDecimal(3.14);
System.out.println(bd);

実行結果

3.140000000000000124344978758017532527446746826171875

BigDecimalに実数を渡すと、より精密に計算して、それを値を持っている。という認識でいいだろうか。

勿論double型に実数リテラルを代入しても、帰ってくるのはそのままの数値。

double d = 3.6;
System.out.println(d);

で、BigDecimalのコンストラクタに文字列を渡した場合はどうなるか。

BigDecimal bd = new BigDecimal("3.14");
System.out.println(bd);

実行結果

3.14

渡した文字列のままで帰ってくる。つまり乱数を渡すとき、べらべら長くするなよという処理をするために、引数をString型にしていた。という認識でいいだろうか。

追記

BigDecimal hoge = BigDicimal.valueOf(3.14);
BigDecimla piyo = new BigDicimal(Double.toString(3.14));