This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: round(2500, -3)
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.7
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: Dennis Sweeney, jacekblaz
Priority: normal Keywords:

Created on 2021-11-04 15:31 by jacekblaz, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Messages (2)
msg405726 - (view) Author: Jacek (jacekblaz) Date: 2021-11-04 15:31
round(2500, -3) returns 2000 instead of 3000.
I have checked it on 3.7.4 and 3.6.9.
msg405733 - (view) Author: Dennis Sweeney (Dennis Sweeney) * (Python committer) Date: 2021-11-04 16:09
Thanks for the report, but this is the intended behavior.

From https://docs.python.org/3/library/functions.html#round :

"""values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done toward the even choice (so, for example, both round(0.5) and round(-0.5) are 0, and round(1.5) is 2)"""

This is called "round-half-to-even" or "Banker's rounding" (see https://en.wikipedia.org/wiki/Rounding#Round_half_to_even) and it's used to prevent the upward bias that would happen if we always rounded halfway points up.
History
Date User Action Args
2022-04-11 14:59:52adminsetgithub: 89878
2021-11-04 16:09:23Dennis Sweeneysetstatus: open -> closed

nosy: + Dennis Sweeney
messages: + msg405733

resolution: not a bug
stage: resolved
2021-11-04 15:31:24jacekblazcreate