Я сделал по топорному,
double d= Double.valueOf("5.0596");
int i= (int) d;
double d2= d- i; // дробная часть
как можно по другому сделать?
Как уже посоветовали, d%1 выполняет ровно то, что надо, наиболее синтаксически коротким методом. С другой стороны, не обязательно это самый дешёвый в вычислении метод; Ваш "топорный" метод в этом смысле может быть даже лучше; если важна скорость, то лучше сделать бенчмарк по сравнению с вычитанием целой части.
Учтите, что int может не вместить всех целых значений для double в тех пределах, где double представляет все целые числа. Для long такое есть хотя бы для диапазона, где шаг значений double равен 1 или меньше. И конверсия бо́льших значений работает так, что молча выдаёт соответствующее крайнее целое, так что результат надо проверять.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости