2016-06-19 3 views
0

Не уверен, что это нормально, но лично, я думаю, что это не дает мне правильный результат. Давайте посмотрим на этот примерАнонимность округления PHP?

$a = 3.32475; 
$b = round($a,2,PHP_ROUND_HALF_UP); 

Я ожидал 3.33, но вместо этого получаю 3.32. Я что-то упустил? Функция округления буквально использует значение третьей десятичной запятой вместо целого значения, а затем округляет ее?

То, что я ожидал, что-то вроде этого: -

- 3.32475 
- 3.3248 
- 3.325 
- 3.33 

Я делаю что-то здесь не так? есть ли лучший способ для меня получить точную базу округления по целому значению, а не третью десятичную точку?

Спасибо.

+0

Просто краткая история ... У меня есть этот модный калькулятор, который позволяет мне установить ответ от 0 до 3 десятичных точек или полного значения. То, что я сделал, это получить 2,5% от 132.99. При полной настройке она вышла как 3.32475, но на 2 десятичных знака, она вышла как 3.33. Вот почему я разместил этот вопрос о том, почему я не могу получить тот же результат с PHP round(). – asyadiqin

ответ

1

Это будет круглый до 3.33 ничего >= 3.325. Ваше значение меньше этого, поэтому оно округляется до 3,32.

Как указано в the docs, PHP_ROUND_HALF_UP означает:

Круглый вал до точности после запятой от нуля, когда половина пути. Создание 1,5 на 2 и -1,5 на -2. [Выделено]

Если вы хотите, чтобы заставить его "круглый" вверх, используйте ceil() вместо round():

$a = 3.32475; 
$b = ceil($a * 100)/100; 

Это находит "потолок" стоимости 332.475, то есть 333, то делит на 100, чтобы дать 3.33.

Кроме того, имейте в виду, что округление никогда не работает так, как вы описали (округляя цифры по одному), если вы не напишите специальную рутину для этого (и я не могу думать о какой-либо реальной причине, для этого).

+0

Он работает над этим значением, но попробуйте на 3.392727. Мой модный калькулятор возвращает значение 3.39, а при использовании вашего ответа возвращается мне 3.40 – asyadiqin

+0

@asyadiqin Не уверен, что вы имеете в виду. Что ваш калькулятор имеет отношение к тому, как работает PHP? Также обратите внимание, что 'ceil' - это * не * другое имя для' round'. –

+0

Приношу свои извинения ... Может быть, я могу объяснить это лучше. Моя проблема заключается в том, что люди, использующие мою функцию, обычно проверяют, используя свой фантастический калькулятор. Поэтому мне нужно дать точный результат. – asyadiqin

Смежные вопросы