整数乘以双精度并将结果存储为双精度

Multiplication of Integer by double and storing result as a double

出于好奇,在 swift:

var a:Double = 3.5
var b:Int = 4
var c = a * Double(b)
var d:Double = a * b

为什么 d 无效而 c 有效?由于我指定 d 是双精度数,编译器难道不应该检测到 b 应该转换为双精度数吗?

Swift 不进行自动类型转换,除非在非常精确的情况下,因此,在混合算术类型时,您必须明确处理转换。

在Swift中,你必须明确地convert类型,而不是cast它。 See the document.

Because each numeric type can store a different range of values, you must opt in to numeric type conversion on a case-by-case basis. This opt-in approach prevents hidden conversion errors and helps make type conversion intentions explicit in your code.

当你有b:Int时,你可以Double(b),因为它是从IntDouble的转换,但你不能b as Double或[=16] =] 因为它正在铸造。

至于 var d:Double = a * b,问题是没有 * 运算符实现接受 DoubleInt 作为操作数和 returns Double.

如果需要,可以实现重载运算符:

func *(lhs:Double, rhs:Int) -> Double {
    return lhs * Double(rhs)
}

var d:Double = a * b // -> 14

但我不建议这样做。您应该改为进行显式 conversion