- 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!
1024-- 28.07.2013 00:25 # +3
> * int(100 * amount) = 3690
Эх, в Эльдорадо бы подобное округление...
bormand 28.07.2013 11:39 # +17
inkanus-gray 28.07.2013 19:31 # +6
anonimb84a2f6fd141 28.07.2013 05:52 # −1
anonimb84a2f6fd141 28.07.2013 06:41 # −1
bormand 28.07.2013 06:53 # +5
А почему тогда количество во флоате?
kegdan 09.08.2013 20:43 # 0
Dummy00001 28.07.2013 14:45 # 0
бугагагаггагаагага. смешно. очень смешно. по математике создатели наверняка были вечными троешниками.
вроде же в питоне есть decimal'ы, которые вроде и fixed point поддерживают? работы правильное денежное округление прикрутить (кастом класс?) минут пять - и потом может быть неделя пыхтения перевести всю денежную математику на свой класс. (хотя в некоторых областях/регионах fixed point тоже не катит и народ пользуется базовым arbitrary precision floating point.)
Stertor 28.07.2013 22:09 # 0
bot 28.07.2013 23:18 # +1
Стоимость нужно хранить в string'ах.
1024-- 29.07.2013 02:02 # −3
anonimb84a2f6fd141 29.07.2013 04:07 # +2
roman-kashitsyn 29.07.2013 06:51 # +2
kegdan 09.08.2013 20:45 # 0
guest 22.04.2014 11:09 # 0
def f(val):
i, d = str(val).partition('.')[::2]
return int(i)*100 + (int(d) if c else 0)