Swift中的数学除法
我试图用不同的方程式和公式制作一个数学应用程序,但我试图圈出扇区,但我只是想尝试将输入值除以360,但当我这样做时,它只显示0,除非值超过360。我尝试过使用字符串、双精度和浮点,但运气不佳。我不知道我做的是错的,但下面是代码。我很感谢你的帮助,但我已经坐了一段时间,并在网上搜索了一个答案,没有结果,我可能是用错误的搜索搜索Swift中的数学除法,swift,math,division,Swift,Math,Division,我试图用不同的方程式和公式制作一个数学应用程序,但我试图圈出扇区,但我只是想尝试将输入值除以360,但当我这样做时,它只显示0,除非值超过360。我尝试过使用字符串、双精度和浮点,但运气不佳。我不知道我做的是错的,但下面是代码。我很感谢你的帮助,但我已经坐了一段时间,并在网上搜索了一个答案,没有结果,我可能是用错误的搜索搜索 if graderna.text == ""{ } else{ var myInt: Int? = Int(grad
if graderna.text == ""{
}
else{
var myInt: Int? = Int(graderna.text!) // conversion of string to Int
var myInt2: Int? = Int(radien.text!)
let pi = 3.1415926
let lutning = 360
let result = (Double(myInt! / lutning) * Double(pi))
svar2.text = "\(result)"
}
在
let result=(Double(myInt!/lutning)*Double(pi))
行中,您在除以两个整数后将类型强制转换为Double
,因此结果将始终为零。你必须在除名前让他们打双打
let result=(Double(myInt!)/Double(lutning))*Double(pi))
行中的let result=(Double(myInt!/lutning)*Double(pi))
在除以两个整数后将类型强制转换为Double
,因此结果始终为零。你必须在除名前让他们打双打
让结果=(Double(myInt!)/Double(lutning))*Double(pi))
您正在将一个Int除以一个Int
整数除法向零舍入最接近的整数。因此,例如359/360不是一个接近1的数字,而是0。360/360到719/360等于1。720/360到1079/360等于2,依此类推
但是你使用的期权太糟糕了。我会写信的
let myInt = Int(graderna.text!)
let myInt2 = Int(radien.text!)
if let realInt = myInt, realInt2 = myInt2 {
let pi = 3.1415926
let lutning = 360.0
let result = Double (realInt) * (pi / lutning)
svar2.text = "\(result)"
}
你正在用一个整数除以一个整数 整数除法向零舍入最接近的整数。因此,例如359/360不是一个接近1的数字,而是0。360/360到719/360等于1。720/360到1079/360等于2,依此类推 但是你使用的期权太糟糕了。我会写信的
let myInt = Int(graderna.text!)
let myInt2 = Int(radien.text!)
if let realInt = myInt, realInt2 = myInt2 {
let pi = 3.1415926
let lutning = 360.0
let result = Double (realInt) * (pi / lutning)
svar2.text = "\(result)"
}
您的代码正在执行整数除法,将整数结果转换为双精度。相反,您希望将这些单个整数转换为双精度整数,然后进行除法运算。因此,与其
let result = (Double(myInt! / lutning) * Double(pi))
你应该
let result = Double(myInt!) / Double(lutning) * Double(pi)
注意,Double
已经有了一个.pi
常量,因此您可以删除pi
常量,并将上述内容简化为:
let result = Double(myInt!) / Double(lutning) * .pi
就我个人而言,我会将myInt
和lutning
定义为从一开始就是Double
(并且,当我们这样做时,移除所有强制展开的选项(使用!
):
或者,您可以使用安全地展开这些可选字符串:
guard
let value = graderna.text.flatMap({ Double($0) }),
let value2 = radien.text.flatMap({ Double($0) })
else {
return
}
let lutning: Double = 360
let result = value / lutning * .pi
(顺便说一下,如果要在弧度和度之间转换,它应该是2π/360,而不是π/360。)您的代码正在执行整数除法,将整数结果转换为双精度。相反,您希望将这些单个整数转换为双精度整数,然后进行除法运算。因此,与其
let result = (Double(myInt! / lutning) * Double(pi))
你应该
let result = Double(myInt!) / Double(lutning) * Double(pi)
注意,Double
已经有了一个.pi
常量,因此您可以删除pi
常量,并将上述内容简化为:
let result = Double(myInt!) / Double(lutning) * .pi
就我个人而言,我会将myInt
和lutning
定义为从一开始就是Double
(并且,当我们这样做时,移除所有强制展开的选项(使用!
):
或者,您可以使用安全地展开这些可选字符串:
guard
let value = graderna.text.flatMap({ Double($0) }),
let value2 = radien.text.flatMap({ Double($0) })
else {
return
}
let lutning: Double = 360
let result = value / lutning * .pi
(顺便说一句,如果你在弧度和度之间转换,它应该是2π/360,而不是π/360。)类型推断规则可能是反直觉的:
Double(1/2)
给出了0.0
,但是1/2 as Double
给出了0.5
(比较)。感谢链接和解释类型推断规则可能是反直觉的:Double(1/2)
给出0.0
,但是1/2 as Double
给出0.5
(比较)。感谢链接和解释感谢您的TIME和帮助@gnasher729感谢您的TIME和帮助@gnasher729