Fix issue #15826.

The implemented fix rounds half-way cases away from zero as described in the original comments.

This rounding algorithm is sometimes called arithmetic rounding. It is described further here: http://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero

I also added several new tests to prevent regressions.