【问题标题】:Math divison in SwiftSwift 中的数学除法
【发布时间】:2016-02-13 17:35:53
【问题描述】:

我正在尝试使用不同的方程式和公式制作一个数学应用程序,但我正在尝试圈出扇区,但我只是想尝试将输入值除以 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)"
        }

【问题讨论】:

标签: swift math division


【解决方案1】:

您的代码正在执行整数除法,获取整数结果并将其转换为双精度数。相反,您希望将这些单独的整数转换为双精度数,然后进行除法。所以,而不是

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($0) }),
    let value2 = radien.text.flatMap({ Double($0) })
else {
    return
}

let lutning: Double = 360
let result = value / lutning * .pi

(顺便说一句,如果你在弧度和度数之间转换,它应该是 2π/360,而不是 π/360。)

【讨论】:

    【解决方案2】:

    您正在将一个 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)"
    }
    

    【讨论】:

    • 感谢您的时间和帮助@gnasher729
    【解决方案3】:

    let result = (Double(myInt! / lutning) * Double(pi)) 行中,您将类型转换为double 将两个整数相除,因此您的结果将始终为零。您必须在除法之前让它们加倍

    let result = (Double(myInt!) / Double(lutning)) * Double(pi))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多