我发现一些非常奇怪的东西 如果您在Swift中运行此代码:
Int(Float(Int.max))
Run Code Online (Sandbox Code Playgroud)
它与错误消息崩溃:
致命错误:浮点值无法转换为Int,因为结果将大于Int.max
这实际上是违反直觉的,所以我将表达式扩展为3行,并试图了解操场中每个步骤会发生什么:
let a = Int.max
let b = Float(a)
let c = Int(b)
Run Code Online (Sandbox Code Playgroud)
它崩溃了相同的消息.这一次,我看到的a是9223372036854775807,b是9.223372e + 18.很明显,a大于b36854775807.我也明白浮点数是不准确的,所以我期望小于Int.max,最后几位为0.
我也试过这个Double,它也崩溃了.
然后我想,也许这就是浮点数的行为,所以我在Java中测试了同样的东西:
long a = Long.MAX_VALUE;
float b = (float)a;
long c = (long)b;
System.out.println(c);
Run Code Online (Sandbox Code Playgroud)
它打印预期9223372036854775807!
swift出了什么问题?