在计算表达式之前,Swift似乎对包含双精度变量的表达式中的文字Int操作数应用了浮点传播(在其他语言中称为浮点传播)。有没有什么明确的说法呢?我找不到关于期望的具体描述。
例如,假设我有let b = 0.14。然后,以下所有操作都会产生相同的结果。(我正在使用Swift 5.0.1。)
19> 5.0 * b / 6.0
$R12: Double = 0.11666666666666668
20> 5 * b / 6
$R13: Double = 0.11666666666666668
21> 5 / 6 * b
$R14: Double = 0.11666666666666668
22> b * 5 / 6
$R15: Double = 0.11666666666666668
23> (5 / 6) * b
$R16: Double = 0.11666666666666668
24> b * (5 / 6)
$R17: Double = 0.11666666666666668这很好,这似乎使预测结果变得更容易,因为它似乎对操作的顺序不敏感。(顺便说一句,我非常确定,这种行为与其他一些语言不同。)然而,我找不到任何明确的声明,说明在混合了双变量的文本整数操作数的情况下应该期望什么;我查看了这些页面,希望找到一些东西:Expressions,Basic Operators,Advanced Operators。有没有人能指出描述这种情况下的预期的规范?
发布于 2019-11-06 04:00:50
看起来Swift应用了浮点传播
实际上不是这样的。看起来是这样的,因为Double符合ExpressibleByIntegerLiteral,这解释了为什么这是可能的:
let double: Double = 1但不是:
let i: Int = 1
print(i * 1.23) // error: binary operator '*' cannot be applied to operands of type 'Int' and 'Double'https://stackoverflow.com/questions/58718509
复制相似问题