2014-06-25 82 views
2

我有一個簡單的溫度轉換器類,我正在努力。錯誤FS0001:類型'int'與'float'類型不匹配

open System 

type Converter() = 
member this.FtoC (f : float) = (5/9) * (f - 32.0) 

member this.CtoF(c : float) = (9/5) * c + 32.0 

let conv = Converter() 

54.0 |> conv.FtoC |> printfn "54 F to C: %A" 

32.0 |> conv.CtoF |> printfn "32 C to F: %A" 

我正在以下編譯錯誤

prog.fs(4,46): error FS0001: The type 'float' does not match the type 'int' 

prog.fs(4,39): error FS0043: The type 'float' does not match the type 'int' 

我缺少什麼?它推斷爲int的代碼是什麼部分?

回答

4

F#不自動整數轉換爲浮動,因此你需要:

type Converter() = 
    member this.FtoC (f : float) = (5.0/9.0) * (f - 32.0) 
    member this.CtoF(c : float) = (9.0/5.0) * c + 32.0 

在你原來的代碼5/9int型和f-32.0float類型。數字運算符如*要求兩個參數的類型相同,因此會出現錯誤。在固定版本中,我使用5.0/9.0,它的類型爲float(因爲它使用浮點數字文字),因此編譯器很高興。

+0

即使兩個整數的劃分不是推斷爲單個或浮點? – fahadash

+2

不,它是一個整數除法「9/5 = 1」,而「9.0/5.0 = 1.8」。事實上,使用整數除法,然後將結果轉換爲浮點數將是一個錯誤,因爲您會得到1而不是1.8! –