Swift 中的数学除法
Math divison in Swift
我正在尝试使用不同的方程式和公式制作一个数学应用程序,但我正在尝试圈出扇区,但我只是想尝试将输入值除以 360,但是当我这样做时它只显示 0,除非该值超过 360。我尝试过使用 String、Double 和 Float,但没有成功。我不知道我在做什么是错的,但下面是代码。感谢您的帮助,但我已经坐了一段时间并在网上搜索了一个没有结果的答案,我可能一直在使用错误的搜索进行搜索。
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))
您正在用 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)"
}
您的代码正在执行整数除法,取整数结果并将其转换为双精度数。相反,您想将这些单独的整数转换为双精度数,然后进行除法。所以,而不是
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 text = graderna.text,
let text2 = radien.text,
let value = Double(text),
let value2 = Double(text2)
else {
return
}
let lutning: Double = 360
let result = value / lutning * .pi
或者,您可以使用 flatMap
安全地解包那些可选字符串:
guard
let value = graderna.text.flatMap({ Double([=14=]) }),
let value2 = radien.text.flatMap({ Double([=14=]) })
else {
return
}
let lutning: Double = 360
let result = value / lutning * .pi
(顺便说一句,如果你在弧度和角度之间进行转换,它应该是 2π/360,而不是 π/360。)
我正在尝试使用不同的方程式和公式制作一个数学应用程序,但我正在尝试圈出扇区,但我只是想尝试将输入值除以 360,但是当我这样做时它只显示 0,除非该值超过 360。我尝试过使用 String、Double 和 Float,但没有成功。我不知道我在做什么是错的,但下面是代码。感谢您的帮助,但我已经坐了一段时间并在网上搜索了一个没有结果的答案,我可能一直在使用错误的搜索进行搜索。
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))
您正在用 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)"
}
您的代码正在执行整数除法,取整数结果并将其转换为双精度数。相反,您想将这些单独的整数转换为双精度数,然后进行除法。所以,而不是
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 text = graderna.text,
let text2 = radien.text,
let value = Double(text),
let value2 = Double(text2)
else {
return
}
let lutning: Double = 360
let result = value / lutning * .pi
或者,您可以使用 flatMap
安全地解包那些可选字符串:
guard
let value = graderna.text.flatMap({ Double([=14=]) }),
let value2 = radien.text.flatMap({ Double([=14=]) })
else {
return
}
let lutning: Double = 360
let result = value / lutning * .pi
(顺便说一句,如果你在弧度和角度之间进行转换,它应该是 2π/360,而不是 π/360。)