Project

General

Profile

Actions

Bug #12580

closed

Difference in sprintf float rounding

Added by vipulnsward (Vipul Amler) over 8 years ago. Updated almost 8 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.0dev (2016-07-10 trunk 55628) [x86_64-darwin15]
[ruby-core:76336]

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) almost 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) almost 8 years ago

  • Status changed from Feedback to Closed

OK, closing as per request.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0