(Untitled)

Nov 09, 2014 01:51

Случился спонтанный ликбез по поводу float-ов в биллинге:

http://amarao-san.livejournal.com/2944300.html

То, что программисты через одного не понимают, что такое плавающая точка и какой физический смысл расчетов в ней, это вымораживает конечно каждый раз.

it/tech

Leave a comment

Comments 39

ufm November 8 2014, 23:39:02 UTC
Единственное, если я правильно понимаю - в обсуждении не принимали участия ни одного программиста. :)

Reply

dmih November 8 2014, 23:42:49 UTC
А думаешь результат был бы иным?
В самом крайнем случае, эти непрограммисты придут к программисту и объяснят, что копеек дробных не бывает, а то, что они тебе в алгоритмах расчета реальных вещей мерещатся, это аберрации сознания и неправда.

Reply

ufm November 8 2014, 23:55:52 UTC
Ок, ок.
У абонента на счету 0.
Тариф стоит 100 рублей в месяц
Списание - посуточное.
В данном месяце - 30 дней.
Мы списываем с абонента по 3.(3) рубля в день.
Что мы показываем в биллинге абоненту? По сколько в день мы с него списываем?
По скольку должен класть денег абонент в день, что-бы через 30 дней у него на счету было 100 рублей?

Reply

dmih November 9 2014, 00:38:36 UTC
Сумма посуточных списаний конечно не может быть отражена в бух документах, потому что она ну вот дробная. Если цена месяца - 100, то она по любому НЕ МОЖЕТ быть написана. Это нормально, потому что акты вообще-то не посуточные.
Округлять её индивидуальные посуточные компоненты нельзя. Округлять её целиком - вообще не надо.
Округлять её при частичных закрытиях периода надо, и это приводит к нормальным правильным результатам, максимально возможно близким в таких условиях к тому, что есть.

Reply


ufm November 9 2014, 00:08:18 UTC
А вот тебе история из жизни. Без всяких флоатов.
Стоимость услуги - 124 рубля _в месяц_. Списание - _посуточное_.
4 декабря у абонента на счету остался 1 рубль и он положил себе на счёт 124 рубля. Отметил у себя в телефоне, что 4 января надо заплатить.
4 января пришёл и заплатил 124 рубля.
4 февраля он придёт и устроит истерику, какого хера мы отключили ему интернет.

Отсюда мораль - если сказано что тариф 100 рублей в месяц - значит и списывай помесячно. И не будет проблем как 100 на 31 поделить.

Reply

dmih November 9 2014, 00:10:59 UTC
Оба примера отлично и до конца правильно работают скажем в моем биллинге. Ты просто кривую реализацию сам придумал и сам заводишься сейчас на спор с ней.

Reply

ufm November 9 2014, 00:13:12 UTC
Ну первый пример - допустим.
А второй-то как?

Reply

dmih November 9 2014, 00:33:19 UTC
Ты прицепился к какой-то вот этой своей "списание посуточное". Нет, не посуточное ( ... )

Reply


alll November 9 2014, 01:40:56 UTC
Фетишизация круглых цифр - всего-навсего один из многочисленных фетишей, с которыми приходится иметь дело. Профессия программист вообще где-то в чём-то сродни профессии психоаналитик.

Reply


norguhtar November 9 2014, 03:51:30 UTC
За деньги в float я каждый раз хочу дать в бубен в людям. Есть decimal. Вот его и используйте. А то все равно где-то забудут округлить.

PS Использовать 4 цифры вместо 2 цифр требуется для учета полукопейки.

Reply


Leave a comment

Up