Показать число до 2 десятичных знаков - PullRequest
478 голосов
/ 19 декабря 2010

Как правильно округлить строку PHP до 2 десятичных знаков?

$number = "520"; // It's a string from a DB

$formatted_number = round_to_2dp($number);

echo $formatted_number;

Вывод должен быть 520.00;

Каким должно быть определение функции round_to_2dp()?

Ответы [ 21 ]

7 голосов
/ 19 декабря 2010

round_to_2dp - это пользовательская функция, ничего нельзя сделать, если вы не опубликовали объявление этой функции

Тем не менее, я думаю, что делает это number_format($number,2);

6 голосов
/ 19 июня 2018

Для условного округления т.е.покажите десятичное число там, где оно действительно необходимо, иначе целое число

123,56 => 12,56

123,00 => 123

$somenumber = 123.56;

$somenumber = round($somenumber,2);

if($somenumber == intval($somenumber))
{
    $somenumber = intval($somenumber);
}

echo $somenumber; // 123.56


$somenumber = 123.00;

$somenumber = round($somenumber,2);

if($somenumber == intval($somenumber))
{
    $somenumber = intval($somenumber);
}

echo $somenumber; // 123    
6 голосов
/ 20 сентября 2013

Я делаю свое.

$decimals = 2;
$number = 221.12345;
$number = $number * pow(10,$decimals);
$number = intval($number);
$number = $number / pow(10,$decimals);
5 голосов
/ 11 сентября 2015
$number = sprintf('%0.2f', $numbers); // 520.89898989 -> 520.89

Это даст вам 2 числа после десятичной дроби.

5 голосов
/ 29 июля 2015
$retailPrice = 5.989;
echo number_format(floor($retailPrice*100)/100,2, '.', ''); 

Возвращает 5.98 без округления числа.

4 голосов
/ 10 мая 2017

Если вы хотите использовать 2 десятичных знака во всем вашем проекте, вы можете определить

bcscale(2);

Тогда следующая функция выдаст желаемый результат

$myvalue=10.165445;
echo bcadd(0,$myvalue);
//result=10.11

Но если вы не используете функцию bcscale, вам нужно написать следующий код, чтобы получить желаемый результат

  $myvalue=10.165445;
  echo bcadd(0,$myvalue,2);
 //result=10.11

Чтобы узнать больше

3 голосов
/ 25 ноября 2015
$twoDecNum = sprintf('%0.2f', round($number, 2));

Округление правильно округляет число, и sprintf принудительно округляет его до 2 десятичных разрядов, если после округления оно составляет всего 1 десятичный знак.

2 голосов
/ 21 января 2017

Здесь я получаю 2 десятичных знака после. (Точка), используя функцию ..

function truncate_number( $number, $precision = 2) {
    // Zero causes issues, and no need to truncate
    if ( 0 == (int)$number ) {
        return $number;
    }
    // Are we negative?
    $negative = $number / abs($number);
    // Cast the number to a positive to solve rounding
    $number = abs($number);
    // Calculate precision number for dividing / multiplying
    $precision = pow(10, $precision);
    // Run the math, re-applying the negative value to ensure returns correctly negative / positive
    return floor( $number * $precision ) / $precision * $negative;
}

Результаты из вышеуказанной функции:

echo truncate_number(2.56789, 1); // 2.5
echo truncate_number(2.56789);    // 2.56
echo truncate_number(2.56789, 3); // 2.567

echo truncate_number(-2.56789, 1); // -2.5
echo truncate_number(-2.56789);    // -2.56
echo truncate_number(-2.56789, 3); // -2.567

Новый правильный ответ

Использовать встроенную функцию PHP bcdiv

echo bcdiv(2.56789, 1, 1);  // 2.5
echo bcdiv(2.56789, 1, 2);  // 2.56
echo bcdiv(2.56789, 1, 3);  // 2.567
echo bcdiv(-2.56789, 1, 1); // -2.5
echo bcdiv(-2.56789, 1, 2); // -2.56
echo bcdiv(-2.56789, 1, 3); // -2.567
2 голосов
/ 29 апреля 2015

Номер без круглых

$double = '21.188624';
echo intval($double).'.'.substr(end(explode('.',$double)),0,2);
1 голос
/ 14 марта 2019

Еще не видел этого, вот еще одно решение с strtok и str_pad :

$num = 520.00
strtok(round($num, 2), '.') . '.' . str_pad(strtok('.'), 2, '0')
...