分部在Swift中无法正常工作

2 swift

这是我的代码:

println(Double(2/5))
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它打印出来

0.0
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我想要它出来0.4.四舍五入有问题吗?

nhg*_*rif 7

问题是,Double在完成两个整数之间的整数除法之前,你不会转换为a .我们来看看操作顺序.我们从内部开始向外移动.

  • 在整数2和整数之间执行整数除法5,从而得到整数0.
  • 从整数创建一个double 0,它创建double 0.0.
  • 调用descriptiondouble 0.0,返回字符串"0.0"
  • 调用println字符串"0.0"

我们可以通过划分它们之前调用Double除法的每一侧的构造函数来解决这个问题.

println((Double(2)/Double(5)))
Run Code Online (Sandbox Code Playgroud)

现在的操作顺序是:

  • 将整数转换2为浮点数2.0
  • 将整数转换5为浮点数5.0
  • 在这些浮点数之间执行浮点除法,得到 0.4
  • 调用description浮点数0.4,返回字符串"0.4".
  • 调用println字符串"0.4".

请注意,将分区的两边都转换为非必要条件Double.

只要我们处理文字,我们就可以写println(2.0/5.0).

我们也可以逃避写作println((2 * 1.0)/5),现在应该将我们所有的文字解释为浮点(因为我们将它乘以浮点).

只要数学运算的任何一方都是浮点类型,整数文字将被Swift解释为浮点类型,但在我看来,显式转换我们的类型要好得多,这样我们就会非常清楚正是我们想要发生的事情.因此,让我们将所有数字都归入相同的类型,并明确说明我们真正想要的是什么.


如果我们处理文字,我们可以添加.0它们以强制它们作为浮点数:

println(2.0/5.0)
Run Code Online (Sandbox Code Playgroud)

如果我们使用变量,我们可以使用构造函数:

let myTwoInt: Int = 2
let myFiveInt: Int = 5

println((Double(myTwoInt)/Double(myFiveInt))
Run Code Online (Sandbox Code Playgroud)