Проблемы округления

Ответить
chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Проблемы округления

Сообщение chtito2 »

Иногда проскакивают депозиты вроде 183.368494 или 19.478597. При этом замечу, что цен за мегабайт ниже чем 0.005 у.е. (т.е. "полкопейки") нет. Еще есть цена 0.01 и 0.02. Вроде со всеми арифметическими операциями на вещественных числах 0.02, 0.01 и 0.005 довольно стабильно работают и Perl и MySQL 5.1 и возвращают вполне ожидаемый результат.
who | grep -i blonde | date; cd $HOME; unzip; touch; strip; finger; mount; fsck; more; yes; uptime; umount; sleep 69

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Сообщение NiTr0 »

Ничего удивительного - траф считается в байтах. Сумма - соответственно тоже целой не бывает практически никогда.

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

Хм. я почему-то зациклился на цене за полный мегабайт. Ну раз такое дело, то что поделаешь. Наверное оно и к лучшему. Спасибо.
who | grep -i blonde | date; cd $HOME; unzip; touch; strip; finger; mount; fsck; more; yes; uptime; umount; sleep 69

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

NiTr0 писал(а):Ничего удивительного - траф считается в байтах. Сумма - соответственно тоже целой не бывает практически никогда.
И все же нет... У большинства депозиты нормально округлены (98.230000, 23.390000, 133.430000, 55.710000 и т.д.) и лишь у отдельных глючно (37.562986, 118.746581, 0.006232 и еще 2-3). Как это можно объяснить?
who | grep -i blonde | date; cd $HOME; unzip; touch; strip; finger; mount; fsck; more; yes; uptime; umount; sleep 69

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Сообщение NiTr0 »

У нас - практически у всех пользователей "нецелые" суммы за сессии.

chtito2
Сообщения: 479
Зарегистрирован: Чт апр 17, 2008 5:26 pm

Сообщение chtito2 »

NiTr0 писал(а):У нас - практически у всех пользователей "нецелые" суммы за сессии.
В поддержку ваших слов следующий код в traffic2sql не оставляет сомнений, что депозит всегда будет "нецелым":
$sum_in += $in / $conf{MB_SIZE} * $price_in if ($price_in > 0);
В таком случае сразу назревает второй вопрос: как так могло получиться, что у меня большинство депозитов строго кратны ценам за мегабайт 0.02, 0.01 или 0.005? :D Например 81.530000, 89.110000.
who | grep -i blonde | date; cd $HOME; unzip; touch; strip; finger; mount; fsck; more; yes; uptime; umount; sleep 69

Ответить