F # преобразование строки в число с плавающей точкой - PullRequest
12 голосов
/ 10 апреля 2011

У меня есть простая проблема, которую я не смог понять.У меня есть программа, которая должна читать с плавающей точкой ввода.Проблема в том, что он придет как строка, и я не могу понять, как преобразовать его в число с плавающей точкой (да, я полный новичок).

let searchString = args.[0]
let myFloat = hmm hmmm hmmmm

Ответы [ 3 ]

15 голосов
/ 11 апреля 2011

Был связанный вопрос по конвертации другим способом . Это немного сложно, потому что формат с плавающей запятой зависит от текущей культуры ОС. Функция float работает с числами в инвариантном культурном формате (что-то вроде «3.14»). Если у вас есть float в зависимом от культуры формате (например, «3,14» в некоторых странах), вам нужно будет использовать Single.Parse.

Например, на моей машине (с настройками чешской культуры, которая использует «3,14»):

> float "1.1";;
val it : float = 1.1
> System.Single.Parse("1,1");;
val it : float32 = 1.10000002f

Обе функции выдают исключение, если вызваны наоборот. Метод Parse также имеет перегрузку, которая принимает CultureInfo, где вы можете явно указать культуру

9 голосов
/ 10 апреля 2011

let myFloat = float searchString

Просто так.

2 голосов
/ 29 августа 2018

A side-effect-free Функция parseFloat будет выглядеть так:

let parseFloat s =
    match System.Double.TryParse(s) with 
    | true, n -> Some n
    | _ -> None

или даже короче:

let parseFloat s = try Some (float s) with | _ -> None
...