Actions

## Bug #18018

closed### Float#floor / truncate sometimes result that is too small.

**Description**

```
291.4.floor(1) # => 291.4 (ok)
291.4.floor(2) # => 291.39 (not ok)
291.4.floor(3) # => 291.4 (ok)
291.4.floor(4) # => 291.4 (ok)
291.4.floor(5) # => 291.39999 (not ok)
291.4.floor(6) # => 291.4 (ok)
```

`g = f.floor(n)`

, for `n > 0`

must return the highest float that has the correct properties:

`g`

<=`f`

`g`

's decimal string representation has at most`n`

digits

I'll note that `floor`

should be stable, i.e. `f.floor(n).floor(n) == f.floor(n)`

for all `f`

and `n`

.

Same idea for `truncate`

, except for negative numbers (where `(-f).truncate(n) == -(f.floor(n))`

for positive `f`

).

Noticed by Eustáquio Rangel but posted on the mailing list.

Please do not reply that I need to learn how floats work. Note that example given in doc `(0.3/0.1).floor == 2`

is not this issue, since `0.3/0.1 #=> 2.9999999999999996`

Actions