Das hat leider mit der technischen Umsetzung von Floats zu tun. Der intern genutzte Wert weicht in einigen Fällen leicht von der "sichtbaren" Darstellung ab. Die 70.585 ist so ein Fall, sie ist in Wirklichkeit nur eine "sehr große" 70.58499999... und dieses Manko zeigt sich beim Runden.
Eine gängige Lösung ist die Nutzung des decimal-Moduls. Dann ist es aber auch ganz wichtig, dass die Zahl als String vorliegen muss, da es andernfalls wieder zum gleichen Problem kommt. Denn mit der 70.585 als Float wird ja auch wieder der "gefakte" Wert übergeben. Irgendwo wird ja hoffentlich die Zahl als String vorliegen, z.B. bei der Nutzereingabe oder beim Verarbeiten der Werte, mit denen gerechnet werden soll. Hier muss man halt die Strings direkt an die Decimal-Klasse übergeben.
Runden geht dann mittels quantize(). wobei wie in deinem Beispiel auch mit einem Exponenten gearbeitet wird. Komplett könnte das so aussehen:
Code: Alles auswählen
from decimal import Decimal, ROUND_HALF_UP
def get_decimal(number, precision=2):
d = Decimal(number)
if precision < 0:
raise ValueError('precision must not be negative')
exp = Decimal(10) ** -precision
return d.quantize(exp, rounding=ROUND_HALF_UP)
print(get_decimal('70.585'))
EDIT: Da war jemand schneller, aber ich lass es mal wegen den zusätzlichen Hinweisen stehen...