WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Сокращение (округление) больших чисел до читаемых тыс. млн. млрд.

Задача: У нас есть большое число с кучей нулей, или может просто большое число, которое неудобно читать. Нам нужно преобразовать его в удобное для чтение число. Например, число 1500, должно превратиться в 1,5 тыс.

Ищем WP-разработчика! Фулл-тайм, удаленка, хорошая зарплата, соц. пакет. Подробности.
Компания Boosta.

В WP есть подобная функция, только для преобразования байтов в килобайты, мегабайты. См. size_format().

Решение: конвертация больших чисел в текстовый вид

Код ниже преобразовывает переданное число в читаемую форму 1 тысяча, 1 миллион, 1 миллиард.

Вариант 1 (на основе функции size_format())

/**
 * Convert big number to readable format.
 *
 * @param int|string $num      Original Number.
 * @param int        $decimals Optional. Precision of number of decimal places. Default 0.
 *
 * @return object Object woth two elements: `num` and `unit`.
 */
function number_to_human( $num, $decimals = 1 ) {

	$quant = [
		'трлн.' => pow( 1000, 4 ),
		'млрд.' => pow( 1000, 3 ),
		'млн.'  => pow( 1000, 2 ),
		'тыс.'  => 1000,
		''      => 1,
	];

	$the_num = 0;

	foreach ( $quant as $unit => $mag ) {

		if ( (float) $num >= $mag ) {

			$the_num = number_format_i18n( $num / $mag, $decimals );

			break;
		}
	}

	return (object) [
		'num' => rtrim( $the_num, '.,0' ),
		'unit' => $unit
	];
}

Пример использования:

$num = number_to_human( 0 );
echo "$num->num $num->unit\n"; //

$num = number_to_human( 16 );
echo "$num->num $num->unit\n"; // 16

$num = number_to_human( 1654, 2 );
echo "$num->num $num->unit\n"; // 1,65 тыс.

$num = number_to_human( 16504.234 );
echo "$num->num $num->unit\n"; // 16,5 тыс.

$num = number_to_human( 16504.234, 2 );
echo "$num->num $num->unit\n"; // 16,5 тыс.

$num = number_to_human( 254854564, 2 );
echo "$num->num $num->unit\n"; // 254,85 млн.

Вариант 2 (на основе рекурсии)

function number_format_to_human( $number, $decimals = 1, $depth = 0 ) {

	$abbr = [ '', 'тыс.', 'млн.', 'млрд.', 'трлн.' ];

	if ( $number >= 1000 ) {
		return number_format_to_human( ( $number / 1000 ), $decimals, ++ $depth );
	}

	return (object) [
		'number' => rtrim( number_format_i18n( $number, $decimals ), '.,0' ),
		'abbr'  => $abbr[ $depth ],
	];
}
<?php $data = number_format_to_human( 254854564 ) ?>

<div class="price">
	<span class="number">
		<?php echo $data->number; // 254,9 ?>
	</span>
	<span class="abbr">
		<?php echo $data->abbr; // млн. ?>
	</span>
</div>

--

Не редко слышу как числа называют цифрами. Например, цифра 125. Не делайте так.

Комментариев нет
    Войти