marco_ocram <m.balzare...@eureka-market.com> added the comment:
thank you very much about the hints, i've improved the code as follows. def rnd(x, n=0): a = x*10**(n + 1) b = int(a) if abs(a - b) >= 0.5: b += 1 if x >= 0 else -1 a = b/10 b = int(a) if abs(a - b) >= 0.5: b += 1 if x >= 0 else -1 return b/10**n def rndup(x, n=0): a = x*10**(n + 1) b = int(a) if abs(a - b) > 0: b += 1 if x >= 0 else -1 a = b/10 b = int(a) if abs(a - b) > 0: b += 1 if x >= 0 else -1 return b/10**n now it manage well your cases ... print(rnd(2.8 - 1.3), 2.8 - 1.3) print(rnd(1.8 - 1.3), 1.8 - 1.3) print(rnd(-2.8 + 1.3), -2.8 + 1.3) print(rnd(-1.8 + 1.3), -1.8 + 1.3) results ... 2.0 1.4999999999999998 1.0 0.5 -2.0 -1.4999999999999998 -1.0 -0.5 we have to define limits caused by the floating point internal representation but for general use in my opinion can work fine. do you see other cases where it cracks? ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue41598> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com