class ActiveModel::Validations::NumericalityValidator

def parse_as_number(raw_value, precision, scale)

def parse_as_number(raw_value, precision, scale)
  if raw_value.is_a?(Float)
    parse_float(raw_value, precision, scale)
  elsif raw_value.is_a?(BigDecimal)
    round(raw_value, scale)
  elsif raw_value.is_a?(Numeric)
    raw_value
  elsif is_integer?(raw_value)
    raw_value.to_i
  elsif !is_hexadecimal_literal?(raw_value)
    parse_float(Kernel.Float(raw_value), precision, scale)
  end
end