use BigDecimal instead of float

Yep, in case you try it with a Float it will raise an error:
ArgumentError: can't omit precision for a Float.