Если я правильно понимаю ваш вопрос, вы просто хотите получить часть после десятичного числа? Вам не нужно на самом деле в дроби (целое число и знаменатель)?
Итак, у нас есть какое-то число, скажем 3.14159
, и мы хотим в итоге просто 0.14159
. Предполагая, что наш номер хранится в float f;
, мы можем сделать это:
f = f-(long)f;
Что, если мы вставим наш номер, работает так:
0.14159 = 3.14159 - 3;
Для этого нужно удалить целую часть числа с плавающей запятой, оставив только десятичную часть. Когда вы конвертируете число с плавающей точкой в длинное, оно сбрасывает десятичную часть. Затем, когда вы вычтете это из исходного числа, вы получите только десятичную часть. Нам нужно использовать long здесь из-за размера типа float
(8 байт в большинстве систем). Целое число (всего 4 байта во многих системах) не обязательно достаточно велико, чтобы охватить тот же диапазон чисел, что и float
, но long
должно быть.