这是我的代码:
println(Double(2/5))
当我运行它时,它会打印出来
0.0
我该如何解决这个问题?我希望它出现在0.4
。四舍五入有问题吗?
答案 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)