@kur4chyt
Качественный говнокод от производителя

Как сделать форматирование числа в таком формате: 20K, 20KK и т.д?

Допустим есть у меня числа:
1. 2 000
2. 20 000
3. 2 000 000

Как можно сделать так, чтобы в этих числах было:
1. 2K
2. 20K
3. 2KK
  • Вопрос задан
  • 67 просмотров
Решения вопроса 2
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
Никита Корнеев
function formatNumber(int $int): string
{
    $k = (int) log($int, 1000);
    $float = round($int / pow(1000, $k), 1);
    $letters = ['К', 'М', 'Млрд'];

    return $float . ($letters[--$k] ?? '');
}

Примеры использования
echo formatNumber(7); // 7
echo formatNumber(78); // 78
echo formatNumber(789); // 789
echo formatNumber(7899); // 7.9К
echo formatNumber(78991); // 79К
echo formatNumber(789919); // 789.9К
echo formatNumber(7899191); // 7.9М
echo formatNumber(78991911); // 79М
echo formatNumber(789919119); // 789.9М
echo formatNumber(7899191191); // 7.9Млрд
echo formatNumber(78991911910); // 79Млрд
Ответ написан
Комментировать
@kur4chyt Автор вопроса
Качественный говнокод от производителя
Нашёл следующую функцию в интернете:
function number_format_short( $n, $precision = 1 ) {
	if ($n < 900) {
		// 0 - 900
		$n_format = number_format($n, $precision);
		$suffix = '';
	} else if ($n < 900000) {
		// 0.9k-850k
		$n_format = number_format($n / 1000, $precision);
		$suffix = 'K';
	} else if ($n < 900000000) {
		// 0.9m-850m
		$n_format = number_format($n / 1000000, $precision);
		$suffix = 'M';
	} else if ($n < 900000000000) {
		// 0.9b-850b
		$n_format = number_format($n / 1000000000, $precision);
		$suffix = 'B';
	} else {
		// 0.9t+
		$n_format = number_format($n / 1000000000000, $precision);
		$suffix = 'T';
	}

  // Remove unecessary zeroes after decimal. "1.0" -> "1"; "1.00" -> "1"
  // Intentionally does not affect partials, eg "1.50" -> "1.50"
	if ( $precision > 0 ) {
		$dotzero = '.' . str_repeat( '0', $precision );
		$n_format = str_replace( $dotzero, '', $n_format );
	}

	return $n_format . $suffix;
}


Если у кого есть свои варианты, отправляйте !
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы