Rounding a number to nearest even
bdsatish
bdsatish at gmail.com
Fri Apr 11 08:45:58 EDT 2008
On Apr 11, 5:33 pm, bdsatish <bdsat... at gmail.com> wrote:
> HI Gerard,
>
> I think you've taken it to the best possible implementation. Thanks !
> On Apr 11, 5:14 pm, Gerard Flanagan <grflana... at gmail.com> wrote:
>
> > In fact you can avoid the call to the builtin round:
>
> > ------------------------------------------------
>
> > assert myround(3.2) == 3
> > assert myround(3.6) == 4
> > assert myround(3.5) == 4
> > assert myround(2.5) == 2
> > assert myround(-0.5) == 0.0
> > assert myround(-1.5) == -2.0
> > assert myround(-1.3) == -1.0
> > assert myround(-1.8) == -2
> > assert myround(-2.5) == -2.0
> > ------------------------------------------------
OK, I was too early to praise Gerard. The following version:
def myround(x):
n = int(x)
if abs(x - n) >= 0.5 and n % 2:
return n + 1 - 2 * int(n<0)
else:
return n
of Gerard doesn't work for 0.6 (or 0.7, etc.) It gives the answer 0
but I would expect 1.0 ( because 0.6 doesn't end in 0.5 at all... so
usual rules of round( ) apply)
More information about the Python-list
mailing list