Řád čísla

Školení, která pořádám

Pro přibližné vyjádření nějakého vysokého čísla se někdy používá zaokrouhlení na první číslici. Lidé si prostě udělají rychlejší a lepší představu ze zápisu „přibližně 800“ než třeba z „789“. Pro takovéto zaokrouhlení se dá použít funkce round:

<?php
round($x, -floor(log10($x)));
?>

Funkce log10 nám vrátí desítkový logaritmus čísla, ze kterého se dá odvodit počet číslic čísla. Pokud tuto hodnotu předáme funkci round se znaménkem minus, bude číslo zaokrouhleno právě na jednu platnou číslici.

Jakub Vrána, Dobře míněné rady, 3.12.2007, diskuse: 7 (nové: 0)

Diskuse

bukaJ:

Grrr, jednoduché, geniální...

Non_E:

Vypadá to elegantně, ale musel bych to doplnit kilometrovým komentářem, proč vlastně logaritmuju. A kdyby se někdo v práci na ten kus kódu podíval, tak budu za prase.

Navíc ti afaik tenhle trik nebude fungovat pro záporná čísla, takže musíš doplnit třeba abs().

Moje, ne příliš efektní varianta,je round($x, -strlen(abs($x))+1).

ikona The Zero:

To ale počítáš jen s celými čísly, mít tam desetinu, už je problém.

Non_E:

Tj, logaritmus to tady má jednodušší.

v6ak:

No už máme kladná a záporná čísla, ale co ten zbytek? Logaritmus nuly není definován...

kozochyt:

Jakub: mě se zdá převod čísla (po ošetření případů záporných čísel a odseknutí desetinné čárky) na řetězec a určení jeho délky menší zátěž na CPU (resp. FPU) než počítání logaritmu na 14 desetinných míst.

ikona Jakub Vrána OpenID:

Ještě funkce pro oříznutí neprvního čísla.

<?php
function floorFirst($x) {
   
$base = pow(10, -floor(log10($x)));
    return
floor($x * $base) / $base;
}
?>

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.