分部在Swift中无法正常工作

时间:2015-03-29 19:35:24

标签: swift

这是我的代码:

println(Double(2/5))

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

0.0

我该如何解决这个问题?我希望它出现在0.4。四舍五入有问题吗?

3 个答案:

答案 0 :(得分:7)

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

  • 在整数2和整数5之间执行整数除法,得到整数0
  • 从整数0创建一个double,它会创建双0.0
  • 在双description上调用0.0,后者返回字符串"0.0"
  • 在字符串println
  • 上调用"0.0"

我们可以通过在分割之前调用分区每一侧的Double构造函数来解决这个问题。

println((Double(2)/Double(5)))

现在的操作顺序是:

  • 将整数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)

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

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

println((Double(myTwoInt)/Double(myFiveInt))

答案 1 :(得分:3)

我认为你的问题是你要划分两个通常会返回一个整数的整数。 我在java中有一个类似的问题,将.0添加到一个或其他整数或通过使用double函数转换为double应该修复它。

它是类型语言的一项功能,可以创建与被分割的值相同类型的结果。

答案 2 :(得分:1)

数字是正确的;而不是你正在采取的方法,试试这个:

print(2.0 / 5.0)