func doSomething1(value: Double) { /* ... */ } func doSomething2(value: UInt) { /* ... */ } let x = 42 // x是一个整数 doSomething1(Double(x)) // 将x转换为Double doSomething2(UInt(x)) // 将x转换为UInt
如果值上溢或下溢,则整数初始化器会产生运行时错误:
Int8(-129.0) // 致命错误:浮点值不能转换为Int8,因为它小于Int8.min Int8(-129) // 崩溃:EXC_BAD_INSTRUCTION / SIGILL Int8(-128) // 好 Int8(-2) // 好 Int8(17) // 好 Int8(127) // 好 Int8(128) // 崩溃:EXC_BAD_INSTRUCTION / SIGILL Int8(128.0) // 致命错误:浮点值不能转换为Int8,因为它大于Int8.max
浮点数到整数转换将值舍入为零:
Int(-2.2) // -2 Int(-1.9) // -1 Int(-0.1) // 0 Int(1.0) // 1个个个个 Int(1.2) // 1个个个个 Int(1.9) // 1个个个个 Int(2.0) // 2
整数到浮点的转换可能是有损的:
Int(Float(1_000_000_000_000_000_000)) // 999999984306749440