相关疑难解决方法(0)

为什么Int(Float(Int.max))给我一个错误?

我发现一些非常奇怪的东西 如果您在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出了什么问题?

floating-point type-conversion swift

5
推荐指数
1
解决办法
1751
查看次数

标签 统计

floating-point ×1

swift ×1

type-conversion ×1