Hi,

There seems to be a rounding error in this method.

The problem lies in the following lines:

85: when 2880..43199 then locale.t :x_days, :count =>

(distance_in_minutes / 1440).round

87: when 86400..525599 then locale.t :x_months, :count =>

(distance_in_minutes / 43200).round

89: else locale.t :over_x_years, :count => (distance_in_minutes /

525600).round

In the calculation (distance_in_minutes / 1440), we are actually

dividing two integers, which of course means that the result of the

division is truncated.

So for instance, if distance_in_minutes is 4319 minutes (just 1 minute

short of 3 full days), then the result of this division is truncated

to 2, and the method returns the string "2 days".

These changes correct the problem, by ensuring that the divisors are

floats:

85: when 2880..43199 then locale.t :x_days, :count =>

(distance_in_minutes / 1440.0).round

87: when 86400..525599 then locale.t :x_months, :count =>

(distance_in_minutes / 43200.0).round

89: else locale.t :over_x_years, :count => (distance_in_minutes /

525600.0).round

So, does anyone know if this actually is a bug, or if there is

something I'm missing? Line 83 already ensures that the division is

performed with floats, so this case does not exhibit the problem I

described:

83: when 90..1439 then locale.t :about_x_hours, :count =>

(distance_in_minutes.to_f / 60.0).round