Home > OS >  Sum of BigDecimals ended up being Integer [Ruby on Rails]
Sum of BigDecimals ended up being Integer [Ruby on Rails]

Time:07-22

I have recently encountered a problem where the sum of big decimals don't return a big decimal, but instead an integer.

sig { returns(BigDecimal) }
def period_hours
  @applicable_items.sum { |payroll_item| payroll_item.hours_worked.to_d }
end

Where @applicable_items return an array of PayrollItem.

The error that I got:

Return value: Expected type BigDecimal, got type Integer with value 0

Also, RubyMine also gives a warning that the return type is not compatible:

Incompatible types
Required:
BigDecimal
Returned:
Integer

I think I can easily get away by adding to_d at the end like this:

@applicable_items.sum { |payroll_item| payroll_item.hours_worked.to_d }.to_d

But still, I am just curious to know why this could possibly return Integer instead of BigDecimal while all the values of the sum are already converted using to_d.

Thank you so much!

CodePudding user response:

Like this:

irb(main):003:0> [].sum &:to_d
=> 0
  • Related