0) дано число в виде десятичной дроби (например 12.34)
1) смотрим количество знаков после запятой и возводим число 10 в эту степень - это будет знаменатель (в нашем случае два знака после запятой, значит, знаменатель равен 10^2 = 100)
2) умножаем исходное число на полученный знаменатель - это будет числитель (в нашем случае 12.34 * 100 = 1234)
3) находим Наибольший Общий Делитель числителя и знаменателя и делим на него числитель и знаменатель (в нашем случае НОД(1234, 100) = 2, итоговая дробь = 617 / 50)
4) тут бы ещё целую часть вынести, но уже лень
Therapyx: там не рандомайзер, а криптографический алгоритм поверх таймштампа с открытым ключом. На стороне сервера находится закрытый ключ, которому соответствуют сгенерированные коды, и по открытому ключу его узнать не получится (NP-полная задача).
RSS - полный объём, выделенный процессу, Heap Total - объём кучи, выделенной из RSS, Heap Used - объём используемой кучи, занятой в Heap Total, External - объём всяких кэшей, проекций открытых процессом файлов и т.п.
Хорошее решение, удобно получать все нужные данные ресурса в составе одного документа, если нет других издержек (например, по размеру хранимых данных).
Yeldos Adetbekov: я бы как раз в основной БД и делал, пару таблиц на агрегаты пустил, проще всего. А потом бы уже оптимизировал выносом в мемкеши и прочие редисы, если бы не хватило производительности на реальной нагрузке. Эти агрегаты я бы сделал не (только) для повышения скорости выборки, но и для упрощения логики в принципе. "Всё нормализовано" и "всё денормализовано", как правило, две экстремальные крайности идеализации предметной области, недостижимые в реальности, а удобные решения находятся где-то посерединке.
1) смотрим количество знаков после запятой и возводим число 10 в эту степень - это будет знаменатель (в нашем случае два знака после запятой, значит, знаменатель равен 10^2 = 100)
2) умножаем исходное число на полученный знаменатель - это будет числитель (в нашем случае 12.34 * 100 = 1234)
3) находим Наибольший Общий Делитель числителя и знаменателя и делим на него числитель и знаменатель (в нашем случае НОД(1234, 100) = 2, итоговая дробь = 617 / 50)
4) тут бы ещё целую часть вынести, но уже лень