From: kieran.mccusker@... Date: 2018-07-11T12:33:20+00:00 Subject: [ruby-core:87906] [Ruby trunk Bug#12548] Rounding modes inconsistency between round versus sprintf Issue #12548 has been updated by unclekiki (Kieran McCusker). It is a real bug, it's just that, as I have said before, the "fix" took the wrong direction. sprintf should behave like round (as it does, or at least did, in jruby with no apparent issues). Round even is a very specialised use case. Imagine you take the height of 100 school children to the nearest half centimetre and then want to output frequencies using sprintf to the nearest whole centimetre. Do you really want the frequencies to spaced like (117), (117.5, 118, 118.5), (119), (119.5, 120, 120.5) The real solution is to make sprintf perform like round. As Matz said 2 years ago "it should be consistent. Will be fixed." ---------------------------------------- Bug #12548: Rounding modes inconsistency between round versus sprintf https://bugs.ruby-lang.org/issues/12548#change-72915 * Author: unclekiki (Kieran McCusker) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: 2.4.0 * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- Hi I've found this possible bug with `sprintf` in our production code, but it seems very odd that no one has reported it so I'm doubting myself. I've tested a few versions (CRuby 2.3.1 and 2.1.9) and it was present in both. To reproduce in irb: ```ruby sprintf('%1.0f', 12.5) ``` Expected result 13 actual 12 In fact if you look at the number sequence 0.5 -> 99.5 you find the even half will all round down and the odd half round up. 12.5.round produces the correct result (13) If you do the same in jruby 2.2.1 you get the expected result of 13. Many thanks Kieran ---Files-------------------------------- round_even.patch (4.43 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: