このコードは、10進数の数にうまく変換されない double 値から BigDecimal を作成しています。 たとえば、Java で new BigDecimal(0.1) と書くと0.1と正確に等しい BigDecimal (スケールが1で、スケールなしの値が1) が作成されると思うかもしれませんが 実際には0.1000000000000000055511151231257827021181583404541015625と等しくなります。
おそらくBigDecimal.valueOf(double d) メソッドの使用が望ましいです。BigDecimal(たとえば、BigDecimal.valueOf(0.1) は0.1を与えます) を作成するためには double の文字列表現を使用します。