| Autor | Zpráva | ||
|---|---|---|---|
| ServIT Profil |
#1 · Zasláno: 7. 10. 2024, 09:49:59
Zdravíčko,
Na mnoha místech používám převod čísla na lidsky ( teda spíše technicky ) čitelný zápis. Donedávna jsem asi 5 let používal funkci, která, jak se ukázalo nedávno převádí špatně. Už nevím, kde jsem ji okopčil, hledat tento druh převodu v angličtině .. no asi jsem hledal ne zrovna správně, ( výsledky hledání byly úplně mimo mé představy ) ale jeden výsledek se trefil - vyskočil na mně kód podobný tomu, co jsem kdysi okopčil. Ale tento kód neměl možnost zvolit IT jednotky, takže to byl pro mně krok zpět ( Format bytes to kilobytes, megabytes, gigabytes - jedna z odpovědí Leo) Teda, abych to shrnul, mám číslo 4000051, chci 4MB. Protože ten nalezený kód byl pro mně nevhodný ( nefungoval podle mých představ), holt jsem zapnul mozek, a trochu to přepsal: function hrv2( $value, $unit, $IT=FALSE, $precision=2 ){
$sign = $value < 0 ? '-':'';
$value = abs( $value );
$pownames = array('-4'=>'p', '-3'=>'n', '-2'=>'µ', '-1'=>'m', '0'=>'', '1'=>'k', '2'=>'M', '3'=>'G', '4'=>'T');
$exp = $IT ? 1024 : 1000;
$ITSign = $IT ? 'i':'';
$value = max($value, 0);
$pow = floor(($value ? log($value) : 0) / log($exp));
$pow = min($pow, count($pownames) - 1);
$value /= pow($exp, $pow);
return $sign.round($value, $precision) . " " . $pownames[$pow].$ITSign.$unit;
}V tomto řešení vše funguje, nicméně, ještě není dořešena kontrola na existenci přípony, pokud je číslo velmi malé - velké. Takže kód dávám k dispozici, doufám, že nevynalézám kolo :D a pokud dořeším ( nebo navrhnete vhodný postup) to omezení, tak to tady uvedu... Milan |
||
| anonym_ Profil * |
#2 · Zasláno: 7. 10. 2024, 09:55:51
ServIT:
Fungujících příkladů se dá najít hafo. A kratších. Např. www.php.net/manual/en/function.filesize.php#106569 |
||
| ServIT Profil |
anonym:
hm.. a umí IT jednotky... ? a umí mg ? pF ( piko Farady ) ? A o tom jsem psal ... Ale vlastně ... ještě jeden zádrhell tu je : tuny ... hm ... doladíme to pořešení neexistující přípony ( abychom se vyhnuli chybové hlášce : namísto $pow = min($pow, count($pownames) - 1); if( ! array_key_exists( $pow, $pownames )){
$powchange = $pow > 0 ? -1 : 1 ;
do{
$pow += $powchange;
} while( ! array_key_exists( $pow, $pownames ));
} |
||
| N71 Profil * |
#4 · Zasláno: 7. 10. 2024, 14:12:00
Proč se snažíš bastlit něco co už někdo zkušenější určitě vytvořil? Vlez na github.com a najdi si knihovnu pro převod jednotek tam.
|
||
|
Časová prodleva: 4 dny
|
|||
| Kcko Profil |
#5 · Zasláno: 11. 10. 2024, 13:18:12
ServIT:
V době AI (GPT, Claude, Gemini) máš potřebu si tohle psát sám? |
||
|
Časová prodleva: 2 roky
|
|||
0