Как в F# узнать количество знаков после запятой в float?

Мне нужно превратить float в дробь, например 3.24 в 324 / 100. Для этого мне нужно узнать сколько знаков после запятой в числе, чтобы потом умножить на числитель и знаменатель и получить дробь из целых чисел.


Ответы (1 шт):

Автор решения: Jean Smith

Я решил свою проблему. Нашёл код в интернете и немного отредактировал. Функция принимает float и возвращает числитель и знаменатель:

let toMixedNumber(x : float) =
    let wholePart = float (int x)
    let decimalPt = x % 1.0
    let rec cF(Z : float, i : int, Dm : float, Do : float) =
        match Z % 1.0 > 1e-6, i < 1 with
        | _    , true  -> int ((System.Math.Round(decimalPt * Do)) + (wholePart * Do)), int Do
        | true , false -> cF(1.0/(Z % 1.0), i - 1 , Do, Do * System.Math.Round(1.0/(Z % 1.0)-0.5) + Dm )
        | false, _  -> int ((System.Math.Round(decimalPt * Do)) + (wholePart * Do)), int Do
    decimalPt
    |> fun x -> cF(x, 14, 0.0, 1.0)
→ Ссылка