Řád čísla
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.
Diskuse
bukaJ:
Grrr, jednoduché, geniální...
3.12.2007 03:17:37
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).
3.12.2007 10:59:07
To ale počítáš jen s celými čísly, mít tam desetinu, už je problém.
4.12.2007 16:26:45
Non_E:
Tj, logaritmus to tady má jednodušší.
8.12.2007 14:17:17
v6ak:
No už máme kladná a záporná čísla, ale co ten zbytek? Logaritmus nuly není definován...
3.12.2007 19:43:33
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.
8.12.2007 00:28:43
Ještě funkce pro oříznutí neprvního čísla.
<?php
function floorFirst($x) {
$base = pow(10, -floor(log10($x)));
return floor($x * $base) / $base;
}
?>
22.5.2020 18:01:21