Как я могу разбить float (1,2) на 1 и 2 целых числа? - PullRequest
0 голосов
/ 29 сентября 2018

Я изучаю F # и у меня есть задание, в котором я должен обрабатывать число с плавающей точкой как координату.Например, float 2.3 будет рассматриваться как координата (2.3), где x равен 2, а y равен 3.

Как я могу разделить число с плавающей точкой для вычисления с ним?

Я пытаюсь сделатьфункция для вычисления длины вектора: пусть lenOfVec (1.2, 2.3) использует метод Пифагора, чтобы получить длину гипотенузы.

Но я уже застрял в разделении поплавка.

Надеюсь, что некоторые могут помочь!

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Имея в своем распоряжении библиотеки, столь же богатые, как F # / .NET, предлагают задачу разделения поплавка на два, можно сделать с помощью одной короткой строки кода:

let splitFloat n = n.ToString().Split('.') |> Array.map float
  • библиотечная функция ToString () преобразует аргумент n (предположительно float) в string
  • библиотечную функцию Split ('.') , примененную к этой строке, преобразует егов array из двух строк, представляющих первое число перед десятичной точкой и второе число после точки
  • , наконец, этот массив из 2 strings преобразуется путем применения библиотечной функции float ккаждый элемент массива с помощью просто другой библиотечной функции Array.map , создающей массив из двух искомых чисел с плавающей точкой

Применительно к случайному числу с плавающей точкой намеченная цепочка преобразованийвыглядит как

123.456 -> "123.456" -> [| 123; 456 |] -> [| 123.0; 456.0 |]

0 голосов
/ 30 сентября 2018

Кража нескольких других ответов здесь, что-то вроде этого работает для нескольких примеров:

open System

///Takes in a float and returns a tuple of the the two parts.
let split (n: float) = 
    let x = Math.Truncate(n)

    let bits = Decimal.GetBits(decimal n)
    let count = BitConverter.GetBytes(bits.[3]).[2]    
    let dec = n - x

    let y = dec * Math.Pow(10., float count)

    x, y

Примеры:

  • 2.3 -> (2.0, 3.0)
  • 200.123 -> (200.0, 123.0)
  • 5.23 -> (5.0, 23.0)

Получить X легко, так как вы можете просто обрезатьдесятичная часть.

Получение Y взял входные данные из этого ответа и этого .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...