- 1
amount_in_cents = int(100 * amount)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−89
amount_in_cents = int(100 * amount)
Поскольку все знают, что float нельзя использовать при работе с деньгами (ну там, ошибки округления), чуваки решили хранить все суммы в центах. Тогда они будут целыми числами.
По такой формуле вычисляется сумма в центах, которую клиент должен заплатить за товар.
Прикол в том, что если товар стоит 36.91 евро, то
* amount = 36.91
* 100 * amount = 3690.9999999999995
* int(100 * amount) = 3690
И клиент платит всего лишь 36.90!
> * int(100 * amount) = 3690
Эх, в Эльдорадо бы подобное округление...
А почему тогда количество во флоате?
бугагагаггагаагага. смешно. очень смешно. по математике создатели наверняка были вечными троешниками.
вроде же в питоне есть decimal'ы, которые вроде и fixed point поддерживают? работы правильное денежное округление прикрутить (кастом класс?) минут пять - и потом может быть неделя пыхтения перевести всю денежную математику на свой класс. (хотя в некоторых областях/регионах fixed point тоже не катит и народ пользуется базовым arbitrary precision floating point.)
Стоимость нужно хранить в string'ах.
def f(val):
i, d = str(val).partition('.')[::2]
return int(i)*100 + (int(d) if c else 0)