Показать число до 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 ]

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

Вы можете использовать number_format () :

return number_format((float)$number, 2, '.', '');

Пример:

$foo = "105";
echo number_format((float)$foo, 2, '.', '');  // Outputs -> 105.00

Эта функция возвращает строку .

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

В качестве альтернативы

$padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00
161 голосов
/ 01 декабря 2011

Используйте round() (используйте, если вы ожидаете число только в формате с плавающей запятой, иначе используйте number_format () в качестве ответа от Codemwnci ):

echo round(520.34345,2);    // 520.34

echo round(520, 2);         // 520

Из руководства:

Описание:

float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] );

Возвращает округленное значение val до указанного precision (количество цифр после десятичной точки).точность также может быть отрицательной или равной нулю (по умолчанию).

...

Пример # 1 round() Примеры

<?php
echo round(3.4);         // 3
echo round(3.5);         // 4
echo round(3.6);         // 4
echo round(3.6, 0);      // 4
echo round(1.95583, 2);  // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2);    // 5.05
echo round(5.055, 2);    // 5.06
?>

Пример #2 примера режима

<?php
echo round(9.5, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.5, 0, PHP_ROUND_HALF_EVEN); // 10
echo round(9.5, 0, PHP_ROUND_HALF_ODD);  // 9

echo round(8.5, 0, PHP_ROUND_HALF_UP);   // 9
echo round(8.5, 0, PHP_ROUND_HALF_DOWN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(8.5, 0, PHP_ROUND_HALF_ODD);  // 9
?>
25 голосов
/ 19 декабря 2010

http://php.net/manual/en/function.round.php

, например

echo round(5.045, 2);    // 5.05

echo round(5.055, 2);    // 5.06
24 голосов
/ 11 января 2013

Попробуйте:

$number = 1234545454; 
echo  $english_format_number = number_format($number, 2); 

Вывод будет:

1,234,545,454.00
12 голосов
/ 09 марта 2015

Вы можете использовать функции php printf или sprintf:

пример с sprintf:

$num = 2.12;
echo sprintf("%.3f",$num);

Вы можете запустить то же самое без echo, ex: sprintf("%.3f",$num);

выход:

2.120

В качестве альтернативы, с printf:

echo printf("%.2f",$num);

выход:

2.124 
11 голосов
/ 14 февраля 2017

Еще один более экзотический способ решения этой проблемы - использовать bcadd() с фиктивным значением для $ right_operand 0.

$formatted_number = bcadd($number, 0, 2);
9 голосов
/ 19 декабря 2010

Использование PHP number_format () функция.

8 голосов
/ 21 мая 2018

Использовать функцию PHP number_format (). например,

$num = 7234545423; 
echo number_format($num, 2); 

Вывод будет:

7,234,545,423.00

7 голосов
/ 26 февраля 2016
bcdiv($number, 1, 2) //2 varies for digits after decimal

Это будет отображать ровно две цифры после десятичной дроби.

Преимущество: Если вы хотите отображать две цифры только после значения с плавающей запятой, а не для int, используйте это.

...