2010-04-24 23 views

Respuesta

24

k es la abreviatura de Kilo prefix y significa mil. Entonces 6k significa seis mil.

Puede dar formato a un número de tal manera con la siguiente función usando la división:

function format($number) { 
    $prefixes = 'kMGTPEZY'; 
    if ($number >= 1000) { 
     for ($i=-1; $number>=1000; ++$i) { 
      $number /= 1000; 
     } 
     return floor($number).$prefixes[$i]; 
    } 
    return $number; 
} 

O usando logaritmo en base 10 y exponenciación:

function format($number) { 
    $prefixes = 'kMGTPEZY'; 
    if ($number >= 1000) { 
     $log1000 = floor(log10($number)/3); 
     return floor($number/pow(1000, $log1000)).$prefixes[$log1000-1]; 
    } 
    return $number; 
} 
+0

cuando me echo echo Kformat ('6000'); me da 6m no 6k –

+0

@moustafa: Se corrigió eso. – Gumbo

+0

En realidad da '1k 10k 100k 500M 500M 50000M 333333G' para' matriz (1000, 10000, 100000, 1000000, 1000000, 100000000, 1000000000); ' – Gordon

2

En 6k, k significa kilo (espero que usted sepa) que es igual a 6000. Reemplace la cifra de mil con k, eso es todo. Espero que ayude :)

+0

es kilo promedio kilogramo o kilometro –

+0

bien ahora cómo puedo hacerlo de la manera más fácil en php –

+0

@moustafa: hmmm :) el metro y el gramo son unidades diferentes, solo concéntrese en ** kilo ** parte. – Sarfraz

3

"6k views" significa 6 kilo-views, o 6,000 views. Se podría extraer este número en PHP usando intval y multiplicando por 1.000: significa

$val = intval("6k views") * 1000; // = 6000 
2
  1. k 1000, por lo que los puntos de vista 6k '= 6000 puntos de vista.
  2. normalmente, en cada acceso a una página, un contador en una base de datos se incrementa en 1. Esto solo se consulta en cada acceso de página e impreso.
  3. después de consultar el valor, divida por 1000 y agregue una 'k' al número (si el número es> 1000).
11

'6k views' en StackOverflow se refiere a la cantidad de vistas que ha recibido una pregunta. Significa 6000 vistas.

Si usted está buscando para dar formato a un número de estilo similar en php a continuación, intentar algo así como

$number = ""; 
if($value > 1000) 
{ 
    $number .= floor($value/1000) . "k"; 
} else { 
    $number .= $value; 
} 
echo $number . " views". 

Obviamente puede agregar casos para las vistas m, G y T, si lo desea.

+0

+1 para su primera respuesta, Geoff - bienvenido a SO :-) –

+0

Gracias, no se olvide la respuesta de Gumbo. Es claramente más genérico, aunque un poco más críptico para los no iniciados. – Geoff

3
$number="6000"; 
$val=($number/1000)."k"; 
//= 6k 

o si el $number="6k";

echo str_replace("k","000",$number); 
+0

bueno trik gracias –

7

abreviada de http://tamlyn.org/2008/12/formatting-bytes-with-significant-figures-in-php/

/** Calculate $value to $sigFigs significant figures */ 
function sigFig($value, $sigFigs = 3) { 
    //convert to scientific notation e.g. 12345 -> 1.2345x10^4 
    //where $significand is 1.2345 and $exponent is 4 
    $exponent = floor(log10(abs($value))+1); 
    $significand = round(($value 
     /pow(10, $exponent)) 
     * pow(10, $sigFigs)) 
     /pow(10, $sigFigs); 
    return $significand * pow(10, $exponent); 
} 

/** Format $value with the appropriate SI prefix symbol */ 
function format($value, $sigFigs = 3) 
{ 
    //SI prefix symbols 
    $units = array('', 'k', 'M', 'G', 'T', 'P', 'E'); 
    //how many powers of 1000 in the value? 
    $index = floor(log10($value)/3); 
    $value = $index ? $value/pow(1000, $index) : $value; 
    return sigFig($value, $sigFigs) . $units[$index]; 
} 

Haciendo *11 porque *10 es demasiado obvio

for($number = 100; $number < 100000000000000000000; $number*=11) { 
    echo format($number), PHP_EOL; 
} 

da

100 1.1k 12.1k 133k 1.46M 16.1M 177M 1.95G 21.4G 236G 2.59T 28.5T 314T 3.45P 38P 418P 4.59E 50.5E 

Si necesita los decimales, utilizar la solución de lo anterior, otra de Gumbo es más compacto. Da:

100 1k 12k 133k 1M 16M 177M 1G 21G 235G 2T 28T 313T 3P 37P 417P 4E 50E 
+0

Esto da un error si el número es 0 – bertmaclin

0
function sigFig($value, $sigFigs = 3) { 
    setlocale(LC_ALL, '[email protected]', 'it_IT', 'it'); 
    $exponent = floor(log10(abs($value))+1); 
    $significand = round(($value 
     /pow(10, $exponent)) 
     * pow(10, $sigFigs)) 
     /pow(10, $sigFigs); 
    return $significand * pow(10, $exponent); 
} 

function format($value, $sigFigs = 3) 
{ 
    $numero = $value; 

    if ($numero > 9999) { 

     $units = array('', 'k', 'M', 'G', 'T', 'P', 'E'); 

     $index = floor(log10($value)/3); 
     $value = $index ? $value/pow(1000, $index) : $value; 
     return sigFig($value, $sigFigs) . $units[$index]; 
    }else{ 
     return number_format($numero, 0, '', '.'); ; 
    } 

    //Resultados: 
     //9999 -> 9.999 views 
     //10000 -> 10k views 
     //10200 -> 10,2k views 
}