Однажды у меня возникла задача резко и просто перевести байты в килобайты и гигабайты с петабайтами и я не имел понятия о том, как это сделать быстро, используя лишь одну математику.
Сначала я копал в эту сторону
if (size < 1024)
return size + " байт";
elseif (size < 1024*1024)
return round(size/1024, 2) + " кб";
elseif (size < 1024*1024*1024)
return round(size/1024/1024, 2) + " мб";
§ Решение
Потом я понял, что это индусское решение и решил переписать с помощью логарифмов. А что такое логарифм? Это обратное к степени действие. Так вот, поскольку числа кратны 1024, то я и решил взять количество по этому основанию:
Причем тут k это целое число. Так вот, если то тогда k будет равно 0, если же то тогда же k = 1. И так далее.