Как я могу убедиться, что число с плавающей точкой всегда будет округлено с помощью PHP? - PullRequest
26 голосов
/ 23 февраля 2011

Я хочу убедиться, что число с плавающей запятой в PHP округляется, если присутствует любое десятичное число, не беспокоясь о правилах математического округления. Эта функция будет работать следующим образом:

1.1 to 2
1.2 to 2
1.9 to 2
2.3 to 3
2.8 to 3

Я знаю, что функция round() существует, но я не вижу никакой функции для округления, если найден какой-либо десятичный знак. Есть ли простой способ сделать это?

Ответы [ 6 ]

61 голосов
/ 23 февраля 2011

Используйте функцию ceil:

$number = ceil(1.1); //2
17 голосов
/ 06 марта 2014

Я знаю, что это старая тема, однако она появляется в Google.Я расширю ответ Блейка Пламба относительно точности.

ceil(1024.321 * 100) / 100;

Умножение на 100 и деление на 100 работает только с сотыми долями.Это не точно для десятых, тысячных, ста тысячных и т. Д.

function round_up($number, $precision = 2)
{
    $fig = pow(10, $precision);
    return (ceil($number * $fig) / $fig);
}

Результаты:

var_dump(round_up(1024.654321, 0)); // Output: float(1025)
var_dump(round_up(1024.654321, 1)); // Output: float(1024.7)
var_dump(round_up(1024.654321, 2)); // Output: float(1024.66)
var_dump(round_up(1024.654321, 3)); // Output: float(1024.655)
var_dump(round_up(1024.654321, 4)); // Output: float(1024.6544)
var_dump(round_up(1024.654321, 5)); // Output: float(1024.65433)
var_dump(round_up(1024.654321, 6)); // Output: float(1024.654321)

Примечания:

Благодарим Джозефа МакДермотта и Джозефа за помощь в улучшении моего оригинального фрагмента.

10 голосов
/ 15 ноября 2012

Я знаю, что на этот вопрос уже давно дан ответ, но он возник, когда я выполнил поиск в Google по этой теме.Если вы хотите округлить с точностью, то хорошим методом было бы использовать функцию ceil и умножить число на количество десятичных знаков, которые вы хотите представить, а затем разделить на это число.

ceil(1024.321*100)/100

будетпроизводить 1024,33

10 голосов
/ 23 февраля 2011

Ceil сделает это за вас

Взятый из примера:

<?php
echo ceil(4.3);    // 5
echo ceil(9.999);  // 10
echo ceil(-3.14);  // -3
?>
2 голосов
/ 14 апреля 2015

Мне нравится ответ Эша и выбор Джозефа, поэтому я предлагаю:

$fig = pow(10, $precision);

Он также должен работать с нулевой и отрицательной значениями точности es:

var_dump(round_up(1024.654321, -1)); // Output: float(103)
2 голосов
/ 05 марта 2015

Мне нравится ответ Эша, хотя у меня было бы:

$fig = (int) str_pad('1', $precision + 1, '0');

Имеет смысл, что если я укажу точность '2', я ожидаю, что она округляется до 2 десятичных знаков.Вопрос выбора, хотя я полагаю.Спасибо за ответ Эш, хорошо работает.

...