round не правильно округляет

Lazarius

Новичок
round не правильно округляет

Привет всем
PHP:
$n = 14.764576271186440677966101694915;
$m = round($n, 2);
echo $m;
По математическим расчетам должно вывестись 14.77, а выводится 14.76
если использовать number_format тоже самое
Вопрос что делать?
 

yaniks

новичок
если я правильно помню математику то >=0.5 то 1 иначе 0
в данном случае 14.764 < 14.765
 

phprus

Moderator
Команда форума
Lazarius
Ты плохо знаеш математику. После 14.76 идет цифра 4, она меньше пяти поэтому при округлении предыдущая цифра не увеличивается. Если бы эта цифра была большей или равной пяти, то при округлении предыдущая цифра увеличилась бы не 1.
 

Lazarius

Новичок
так но после тысячных (цифра 4), идет цифра 7, которая увеличит 4
следовательно 14,765, следовательно, если округлить до сотых
14,77
 

Tor

Новичок
Lazarius
тебе уже сказали как правильно и где читать
но ты видно очень уперт
по твоему, 1.11111111119 округляется до 2?
 

McSimm

Новичок
Lazarius
логика ошибочная
0.0045 меньше чем 0.0050, поэтому округлять в большую сторону неправильно.
 

phprus

Moderator
Команда форума
Lazarius
Я думаю тебе в начальную школу пора с твоими то знаниями в данной области. (на сколько я помню именно там проходят округление дробных чисел).
P.S. Да простят меня модераторы за это сообщение

McSimm
Ты тоже не прав.
0.0046 тоже меньше чем 0.0050, но его нужно округлять в большую сторону а именно до 0.0050.
 

vadim

Guest
почитайте про функцию в мануале и поймёте как она округляет
 

itprog

Cruftsman
vadim
понимаю, что отметится хочется, но в мануале _как_ она округляет не прочитаешь.

Lazarius
Ты просто запутался, учитываются не все цифры, а только первый в отбрасываемой части
 

SelenIT

IT-лунатик :)
phprus
0.0046 ... нужно округлять в большую сторону а именно до 0.0050.
??
И 0.0045, и 0.0046 округляются до тысячных до 0.005, но даже до одной сотой ни одно из них не дотягивает...
 

McSimm

Новичок
phprus
Ты тоже не прав.
0.0046 тоже меньше чем 0.0050, но его нужно округлять в большую сторону а именно до 0.0050.
и что из этого?
да пусть хоть 0.00499999 - если оно меньше чем 0.005, то округлять к 0.01 неправильно
 

phprus

Moderator
Команда форума
SelenIT
Упс. нуль лишний напечатал. Я имел ввиду что при округлении до тысячных чисел 0.0045 и 0.0046 получится 0.005.

Судя по всему я не правильно понял McSimm. По этому прошу прощение за свои сообщения написанные на основании неверной трактовки сообщения McSimm.
 

rob72

Новичок
А почему не застраховать себя от разных двусмысленностей и
не ломать голову по поводу того, как функция округляет
PHP:
$n=14.764576271186440677966101694915; 
$k=0.005;//Зависит от того, какая нужна точность
//--Теперь всегда будет округляться в большую сторону--
$m=round($n+$k,2);
echo $m;
Ответ: 14,77
Если нужно всегда округлять в меньшую сторону, просто
$k=-0,005
 

Фанат

oncle terrible
Команда форума
Tor это не бред. он просто перепутал вопросы.
причём вполне возможно, что аффтору топика его ответ таки понадобится
судя по разрядности числа
 

Lazarius

Новичок
Да... правила округления я давным давно забыл, а может и не знал :)

А может кто нибудь подсказать как можно реализовать, на первый взгляд, достаточно простую штуку
есть 3 позиции товара

товар | цена без НДС | Сумма без НДС | Сумма НДС | Сумма с НДС
_______________________________________________________
товар1 | 39851.69 | 39851.69 | 7173.31 | 47025.00
товар2 | 70525.42 | 70525.42 | 12694.58 | 83220.00
товар3 | 82.60 | 82.60 | 14.87 | 97.47
_______________________________________________________
Итого: | | ? | ? | 130342.47


Там где стоят знаки вопроса должны стоять суммы по всем позициям без НДС и с НДС соответственно.
Возьмем к примеру сумму НДС: если сложить значения по всем позициям, то итог = 19882.76, однако если взять от итоговой суммы ндс (130342.47 \ 118 * 18) получается 19882.75, что и является правильной суммой ндс.
То есть проблема в том что если посчитать ндс для каждой позиции в отдельности и сложить предварительно округлив то получается одно, но если не округлять, то получиться другая (правильная) сумма. Но эта правильная сумма не будет соответсвовать сумме округленных значений НДС по каждой позиции.

Что с этим делать я ума не приложу.
 

bgm

&nbsp;
Есть такой предмет - "финансовая математика", где всё подробно расписано. В том числе и правила округления в финансовой сфере. Тебе туда.
 
Сверху