2016-09-22 11 views
1

誰でもこのコードの何が間違っているか教えてください。Fで入力文字列が正しい形式でない#

open System 
let hexarea t:float = 
    (3.0*Math.Sqrt(3.0)/2.0) * Math.Pow(t, 2.0) 
let value = float (Console.ReadLine()) 
let calc = hexarea value 
printfn "%f" calc 

私はそれが

open System 
let hexarea t : float = 
    (3.0 * Math.Sqrt(3.0)/2.0) * Math.Pow(t,2.0) 
[<EntryPoint>] 
    let main argv = 
    let value = float (Console.ReadLine()) 
    let calc = hexarea value 
    printf "%f" calc 
    0 

ようなものだ時にそれが動作することを、ヒントを与えることができます。

私に何が起きているのか、最初のコードの問題点を教えてください。私は最後の行から0を削除した場合、それは文句だも

..

+2

[あなたのコードは問題なく動作](https://ideone.com/yjFcW1)。 0を必要とするため、あなたが 'EntryPoint'を使うとき、それが適用される関数は' int'を返さなければなりません。 – ildjarn

+0

コードは正常に動作しています。の必要はありません。プログラムにエントリポイントを明示的に示すEntryPoint属性がない場合、最後のファイルの最上位レベルのバインディングがエントリポイントとして使用されます。 –

+0

しかし、もし何かを返そうとしていないのであれば?私はどのような価値を返すべきですか? 0は「OK Executed」という従来の意味を持つようですが、どのように一般的なのでしょうか?それはちょうど慣例であるか、または0を返すための強制的なルールですか? –

答えて

2

あなたがあなたの質問のタイトルとして「入力文字列が正しい形式ではありませんでした」例外を取得している場合は、これは可能性があることを示唆していますConsole.ReadLineに入力した番号が正しい形式ではありません。

小数点ではなく小数点のカンマを使用している国からの場合、これは継続的な痛み点です。チェコでは、我々は3,14を書いて、あなたがcs-CZに現在のカルチャを設定した場合、あなたが得る:

System.Threading.Thread.CurrentThread.CurrentCulture <- 
    System.Globalization.CultureInfo.GetCultureInfo("cs-CZ") 

float "1.0" // Works because this uses invariant culture 
System.Double.Parse("1.0") // Fails because this uses cs-CZ culture now 

float "1,0" // Fails because the invariant culture requires . 
System.Double.Parse("1,0") // Works according to cs-CZ culture 
関連する問題