Swift中的数学除法

Swift中的数学除法,swift,math,division,Swift,Math,Division,我试图用不同的方程式和公式制作一个数学应用程序,但我试图圈出扇区,但我只是想尝试将输入值除以360,但当我这样做时,它只显示0,除非值超过360。我尝试过使用字符串、双精度和浮点,但运气不佳。我不知道我做的是错的,但下面是代码。我很感谢你的帮助,但我已经坐了一段时间,并在网上搜索了一个答案,没有结果,我可能是用错误的搜索搜索 if graderna.text == ""{ } else{ var myInt: Int? = Int(grad

我试图用不同的方程式和公式制作一个数学应用程序,但我试图圈出扇区,但我只是想尝试将输入值除以360,但当我这样做时,它只显示0,除非值超过360。我尝试过使用字符串、双精度和浮点,但运气不佳。我不知道我做的是错的,但下面是代码。我很感谢你的帮助,但我已经坐了一段时间,并在网上搜索了一个答案,没有结果,我可能是用错误的搜索搜索

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