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: 1 rok
|
0