Actions
Bug #18018
closedFloat#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 mostn
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
Like0
Like0Like0Like0Like0Like0Like0Like0