Это код, который я использовал в C # для вычисления доли для данных GPS EXIF. Метод возвращает массив из двух целых чисел - одно является числителем, а другое - знаменателем.
public static int[] GetFraction(Decimal value)
{
int denominator = 1;
int numeratorMultiplier = 1;
Decimal numerator = value * numeratorMultiplier;
int failSafe = 0;
while (Decimal.Remainder(numerator, 1m) != 0m && failSafe < 20 && ((long)numerator * 10) < Int32.MaxValue)
{
denominator *= 10;
numeratorMultiplier *= 10;
numerator = value * numeratorMultiplier;
failSafe++;
}
return new int[] {Decimal.ToInt32(numerator), denominator};
}