Autor Zpráva
Apacuka
Profil
Zdravím, chci se zeptat jestli sem to udělal dobře, nebo by to šlo ještě jednodušeji.

function cislo($cislo) {
$cislo = Str_Replace(" ","",$cislo); //  zbaví číslo prázdných znaků

for ($i = 4; $i <= 6; $i++)  // pro 4-6 místná čísla
{
  if (strlen($cislo) == $i) 
  { 
    $cislo = substr($cislo, 0, $i-3);  // zkrátí číslo o poslední 3 znaky .... 54321 -> 54
    $cislo = $cislo.' k'; // doplní jednotku za zkrácené číslo ... -> 54 k
  }
} 

for ($i = 7; $i <= 9; $i++)  // pro 7-9 místná čísla
{
  if (strlen($cislo) == $i) 
  { 
    if (substr($cislo, $i-6, 1) == 0)  // jestli je 6 číslo od konce 0 .... 987 054 321
    { 
      $cislo = substr($cislo, 0, $i-6).' M';  // tak vypis ... 987 M
    }
    else 
    {   // jinak vypiš číslo i s jedním desetinným místem .... 987 654 321 -> 987.6 M
      $cislo = substr($cislo, 0, $i-6).'.'.substr($cislo, $i-6, 1).' M';  
    }
  }
} 

}
 
// cislo (nejake_cislo);

//        4 321 => 4 k
//       54 321 => 54 k
//      654 321 => 654 k
//    7 054 321 => 7 M
//    7 654 321 => 7.6 M
//   87 054 321 => 87 M
//   87 654 321 => 87.6 M
//  987 054 321 => 987 M
//  987 654 321 => 987.6 M
TomasJ
Profil
Pokud se nepletu tak na zaokrouhlování (Jestli tady o to jde) tak je funkce
round();

Pokud nevíte jak tuto funkci použít a potřebujete zaokrouhlit velikost nějakého souboru (jak jsem zde pochopil) tak vám mohu poskytnout tuto funkci:
function cislo($vstup){ //samozřejmě $vstup se bere jakože je tu v Bytech
if($vstup < 1024)  {$vstup = ($vstup); $j = " B";} // $j = výstupní jenotka
if($vstup >= 1024) {$vstup = ($vstup / 1024); $j = " k";}
if($vstup >= 1024) {$vstup = ($vstup / 1024); $j = " M";}
return round($vstup, 1).$j; // 1 = zaokrouhlování na jedno desetinné místo
}
Joker
Profil
Apacuka:
Má to určitě být takhle?
// 7 054 321 => 7 M
// 7 654 321 => 7.6 M

Nemá to být spíš 7,1M a 7,7M?

Já bych to dělal nějak takhle, kdyby to mělo být univerzálnější:
function cislo($vstup)
{
  $predpony = array("k", "M", "G", "T");

  if($vstup < 1000) return $vstup;
  $max = count($predpony);
  $i = 0;
  while(($i < $max) && ($vstup > 1000))
  {
    $vstup = $vstup / 1000;
    $i++;
  }
  return(round($vstup, 1).$predpony[$i]);
}

Je to trochu ukecané, ale řekl bych přehlednější. Prasácký programátor by to pro nic/k/M zvládl i na jeden řádek:
function cislo($vstup)
  return(($vstup < 1000) ? $vstup : ($vstup < 1000000) ? round($vstup/1000)."k" : round($vstup/1000000)."M"));
Apacuka
Profil
Jejda ... Přes 2 hodiny si tu hraju se svojí první funkční funkcí. Googlím příkazy kde se dá, a vy na me vyblafnete najednou tohle :)
Se souborama to nemá nic společnýho, ale asi je lepší, když to bude zaokrouhlovat.
Jsou to jen informacni cisla, takze na tech desetinnejch uz mi tak moc nezalezelo.

Ale je pravda, ze sem měl v hlavě nějakej cíl, tak sem šel tvrdě po něm. Nedíval sem se do prava, doleva a přitom šlo dělit jen nulama :D

díky moc
TomasJ
Profil
Reaguji na Jokera:
No ten tvůj EDIT je lepší, nicméně já tuto fci používám k zaokrouhlení velikosti hudby na webu a tak nepotřebuji navíc gigabyte a terabyte :)
petr 6
Profil
Matematika má takovou hezkou funkci logaritmus
function hezke_cislo($cislo){
$rad=floor(log10($cislo));
while(fmod($rad,3)!=0){
$rad--;
}
$rad;
$ncislo=$cislo/pow(10,$rad);

$predpona=array("","k","M","G","T"); // atd. => funguje pouze pro cisla vetsi nez 1
return round($ncislo).$predpona[$rad/3];
}
fuckin
Profil
Moje řešení
function formatVelikost($size)
{
    $filesizename = array(" B"," KB"," MB"," GB"," TB"," PB"," EB"," ZB"," YB");
    return $size ? round($size / pow(1024,($i = floor(log($size,1024)))),2).$filesizename[$i] : '0 Bytes';
    }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0