MaratD
round не угодил этим:
ZerG
Ну а если просто до ближайшего целого числа
# -*- coding: utf-8 -*-
import math
res = 4.335/3
print math.ceil(res)
2.0
Вы не написали чем вам не угодил другой вариант.
MaratD
round не угодил этим:
ZerG
Ну а если просто до ближайшего целого числа
# -*- coding: utf-8 -*-
import math
res = 4.335/3
print math.ceil(res)
2.0
>>> a = 1.445 0: 1.445 >>> b = 1.545 1: 1.545 >>> c = round(a, 2) 2: 1.45 >>> d = round(b, 2) 3: 1.54
>>> '{:.53f}'.format(a) 4: '1.44500000000000006217248937900876626372337341308593750' >>> '{:.53f}'.format(b) 5: '1.54499999999999992894572642398998141288757324218750000' >>> '{:.53f}'.format(c) 6: '1.44999999999999995559107901499373838305473327636718750' >>> '{:.53f}'.format(d) 7: '1.54000000000000003552713678800500929355621337890625000'
PooHМожет быть. Но есть еще статья какие бывают виды округления.
Во float числа хранятся в формате с плавающей точкой….
MaratDНе кажется странным. Былобы очень странно если было не так.
Вам не кажется странным следующее
MaratDМогу только посоветовать еще раз прочитать документацию. Там всего один абзац.
какая логика округления не пойму?
doza_andСогласен. Пропустил это в доке, внутренний формат не причем.
rounding is done toward the even choice
MaratDКлассическое округление, без использования библиотек. Наслаждайтесь
о

def rd(x,y=0): ''' A classical mathematical rounding by Voznica ''' m = int('1'+'0'*y) # multiplier - how many positions to the right q = x*m # shift to the right by multiplier c = int(q) # new number i = int( (q-c)*10 ) # indicator number on the right if i >= 5: c += 1 return c/m # Сравните: print( round(0.49), round(0.51), round(0.5), round(1.5), round(2.5), round(0.15,1)) # 0 1 0 2 2 0.1 print( rd(0.49), rd(0.51), rd(0.5), rd(1.5), rd(2.5), rd(0.15,1)) # 0 1 1 2 3 0.2