The answers here are not wrong, but not precise either. Your problem has nothing to do with the BigDecimal class as such, but with the nature of doubles.
A double is internally represented as an exponential, you could imagine the computer storing something looking like 0.22 * 2^15. However not every number can be represented accurately this way (for your case see: https://www.binaryconvert.com/result_double.html?decimal=049051053046054057). This inaccurate representation is what you pass to the BigDecimal constructor.
In conclusion, the input argument for your BigDecimal constructor is the approximation that you see in the end. The BigDecimal constructor did nothing wrong, its input was inaccurate.