2014-12-05 44 views
0

此代碼失敗:夫特浮子乘法誤差

let element: Float = self.getElement(row: 1, column: j) 
let multiplier = powf(-1, j+2)*element 

與此錯誤:

Playground execution failed: :140:51: error: cannot invoke '*' with an argument list of type '(Float, Float)' let multiplier = powf(-1, j+2)*element

記住,這發生在該塊:

for j in 0...self.columnCount { 

其中columnCount是浮動。此外,第一行確實執行,所以getElement方法確實返回一個Float。

我完全被這個困惑,因爲我沒有看到它不應該工作的原因。

回答

2

在swift中沒有隱式數值轉換,因此在處理不同類型和/或預期類型與表達式結果不同時,必須進行顯式轉換。

在你的情況,jIntpowf期望一個Float,所以它必須如下轉換:

let multiplier = powf(-1, Float(j)+2)*element 

注意,2文字,儘管通常認爲是一個整數時,自動推斷出Float由編譯器鍵入,因此在這種情況下不需要顯式轉換。

0

我最終通過使用Float(j)而不是j來解決這個問題,當調用powf()。顯然,j不能隱式轉換爲浮點。