1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

numeric.c: round to nearest even

* numeric.c (flo_round, int_round): support round-to-nearest-even
  semantics of IEEE 754 to match sprintf behavior, and add `half:`
  optional keyword argument for the old behavior.
  [ruby-core:76273] [Bug #12548]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56590 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-11-05 09:49:39 +00:00
parent 76977611dd
commit dfe91fcd08
10 changed files with 322 additions and 39 deletions

View file

@ -205,8 +205,8 @@ module REXML
# Now, get the bounds. The XPath bounds are 1..length; the ruby bounds
# are 0..length. Therefore, we have to offset the bounds by one.
ruby_start = ruby_start.round - 1
ruby_length = ruby_length.round
ruby_start = round(ruby_start) - 1
ruby_length = round(ruby_length)
if ruby_start < 0
ruby_length += ruby_start unless infinite_length
@ -376,10 +376,13 @@ module REXML
end
def Functions::round( number )
number = number(number)
begin
number(number).round
neg = number.negative?
number = number.abs.round(half: :up)
neg ? -number : number
rescue FloatDomainError
number(number)
number
end
end