Řá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.
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).
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.
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.