Как в 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)