Fix #1174 Add number_shorten() function and 'shorten' template filter

This commit is contained in:
Kijin Sung 2019-07-27 21:33:30 +09:00
parent 4f20f0e8c1
commit 72577ce6bb
4 changed files with 73 additions and 0 deletions

View file

@ -381,6 +381,35 @@ function base64_decode_urlsafe($str)
return @base64_decode(str_pad(strtr($str, '-_', '+/'), ceil(strlen($str) / 4) * 4, '=', STR_PAD_RIGHT));
}
/**
* This function shortens a number using common suffixes.
*
* @param int $number The number to shorten
* @param int $significant_digits The number of significant digits to retain
* @return string
*/
function number_shorten($number, $significant_digits = 2)
{
$length = strlen(abs(intval($number)));
switch ($length)
{
case 0: case 1: case 2: case 3: return strval(intval($number));
case 4: return number_format($number / 1000, max(0, $significant_digits - 1)) . 'K';
case 5: return number_format($number / 1000, max(0, $significant_digits - 2)) . 'K';
case 6: return number_format($number / 1000, max(0, $significant_digits - 3)) . 'K';
case 7: return number_format($number / 1000000, max(0, $significant_digits - 1)) . 'M';
case 8: return number_format($number / 1000000, max(0, $significant_digits - 2)) . 'M';
case 9: return number_format($number / 1000000, max(0, $significant_digits - 3)) . 'M';
case 10: return number_format($number / 1000000000, max(0, $significant_digits - 1)) . 'G';
case 11: return number_format($number / 1000000000, max(0, $significant_digits - 2)) . 'G';
case 12: return number_format($number / 1000000000, max(0, $significant_digits - 3)) . 'G';
case 13: return number_format($number / 1000000000000, max(0, $significant_digits - 1)) . 'T';
case 14: return number_format($number / 1000000000000, max(0, $significant_digits - 2)) . 'T';
case 15: return number_format($number / 1000000000000, max(0, $significant_digits - 3)) . 'T';
default: return floor($number / 1000000000000) . 'T';
}
}
/**
* Convert a server-side path to a URL.
*