Bug #12580
closedDifference in sprintf float rounding
Description
on 2.4-dev
irb(main):006:0> sprintf "%0.01f", 5.55 => "5.6" irb(main):007:0> 5.55.class => Float
on 2.4-preview
irb(main):001:0> sprintf "%0.01f", 5.55 => "5.5" irb(main):002:0> 5.55.class => Float irb(main):003:0>
Is the change intentional? If yes, what prompted this rounding change?
This is currently causing issues on iso8601 serializer on Rails https://github.com/rails/rails/blob/04c512da1247a54474cfd8bef17a9e9019c34004/activesupport/lib/active_support/duration/iso8601_serializer.rb#L25
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
- Status changed from Open to Feedback
Resulting 5.6 by rounding 5.55 off to one decimal place looks more "natural", than 5.5.
New behavior considers binary representation error.
What problem occurs concretely?
Updated by vipulnsward (Vipul Amler) over 8 years ago
Nobuyoshi Nakada wrote:
Resulting 5.6 by rounding 5.55 off to one decimal place looks more "natural", than 5.5.
New behavior considers binary representation error.What problem occurs concretely?
hmm, even C does it this way - http://codepad.org/raENqNSj
No, problem per-se, I was not sure of why this change was, or where it was "fixed". Will fix on Rails End to take this into account.
Updated by vipulnsward (Vipul Amler) about 8 years ago
I believe, we can close this based on discussion on https://twitter.com/a_matsuda/status/796782820454580224 ?
Updated by shyouhei (Shyouhei Urabe) about 8 years ago
- Status changed from Feedback to Closed
OK, closing as per request.