2016-10-21 7 views
3

私はf#を学んでいて、ユーザーが数字を入力するように求める関数を実行しています。この関数はユーザー入力を表示し、正または負の数を表示します。しかし、プログラムを実行しようとするとエラーとなり、入力がintではなく文字列であることが示されます。関数の出力を文字列に変換する方法はわかりません。F#で入力の結果をintに変換するにはどうすればよいですか?

open System 

let sign num = 
    if num > 0 then "positive" 
    elif num < 0 then "negative" 
    else "zero" 

let main() = 
    Console.Write("please enter a number:") 
    let input = Console.ReadLine() 
    Console.Write("The number {0}", sign 1) 
    System.Console.ReadKey() |> ignore 


main() 
+0

:また、同じ行のタプルを分解することができます –

+0

ところで、あなたは 'Open System'か' System.Int32.TryParse'を使ってください。 'Int32.TryParse'は.NET 1.0以来存在しています –

+0

@PanagiotisKanavos重複は取り除くことができますが、あなたが言及している違いは答えであり、質問ではありません。そのような疑問がたくさんありました。私はあなたの答えがより完全であることを認めます。 – Gustavo

答えて

6

(int)inputint input使用。カバーの下で、これは入力を解析してintを返すか、System.FormatExceptionをスローします。

また、Int32のTryParseメソッドを使用して、結果と成功インジケータの両方をタプルとして返すこともできます。それは当然の選択 `(int)を`提供していないと、直接解析し、いなくてもTryParseに行く - 重複が最良の選択ではありません@Gustavo

let (ok,number)= System.Int32.TryParse input 
let message=if ok then 
       sprintf "The number %i" i 
      else 
       sprintf "%s is not a number" input 
Console.WriteLine message 
+4

Gustavoが指摘しているように、 '(int)input'はキャストのように誤って見えます。代わりに' int input'を使うべきです。 – kvb

関連する問題