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

就个人而言,我会从一开始就将 myIntlutning 定义为 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。)