2014-12-05 45 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不能隐式转换为浮点。