BigDecimal is correct. Excel is incorrect.
BigDecimal is designed to provide exact precision. So much so, that operations that would result in repeating decimals throw an exception, because an exact representation is not possible:
BigDecimal.ONE.divide(new BigDecimal(3));
Causes an ArithmeticException
with the message:
Non-terminating decimal expansion; no exact representable decimal result
Excel uses floating point arithmetic, which is imprecise, or rather has a maximum level of precision. With it, small fractional errors may accumulate potentially leading to a mathematically "incorrect" answer.