Actions
Bug #18018
closedFloat#floor / truncate sometimes result that is too small.
Bug #18018:
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 mostndigits
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