Задать вопрос
@UnFox

Как переводить сокращенные числа в обычные?

Есть функция, которая из чисел делает сокращенные, например 1000 = 1к.
function number_format_short( $n, $precision = 1 ) {
	if ($n < 999) {
		// 0 - 900
		$n_format = number_format($n, $precision);
		$suffix = '';
	} else if ($n < 999999) {
		// 0.9k-850k
		$n_format = number_format($n / 1000, $precision);
		$suffix = 'к';
	} else if ($n < 999999999) {
		// 0.9m-850m
		$n_format = number_format($n / 1000000, $precision);
		$suffix = 'кк';
	} else if ($n < 999999999999) {
		// 0.9b-850b
		$n_format = number_format($n / 1000000000, $precision);
		$suffix = 'ккк';
	} else {
		// 0.9t+
		$n_format = number_format($n / 1000000000000, $precision);
		$suffix = 'кккк';
	}
  // 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;
}


Как теперь их обратно переводить?)
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
function convert_em_back($num) {
  $numeric = intval($num, 10);
  $suffix = preg_replace('/[0-9]/', '', $num);
  if (preg_match('/[^k]/', $suffix)) {
  	return false; // wrong format
  }
  return $numeric * pow(1000, strlen($suffix));
}


бонус: решение на js (не пропадать же добру)
function раскукожитьОбратно(num) {
  let numeric = parseInt(num, 10)
  let suffix = num.replace(/[0-9]/, '')
  if (suffix.split('').some(char=>char!=='k')) {
  	return NaN // wrong format
  }
  return numeric * Math.pow(1000, suffix.length)
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы