测试设备上的结果始终为100

时间:2015-06-16 19:37:30

标签: ios swift

我写了这个小型计算器,它在模拟器上完美运行,但是如果我在iPhone 6上测试并运行它,结果总是100

如果我在结尾处舍入结果并不重要,那么它会得到相同的结果:100.0

import UIKit

class maininterfaceVC: UIViewController {



    @IBOutlet weak var volltonTF: UITextField!
    @IBOutlet weak var rasterTF: UITextField!

    @IBOutlet weak var ergebnisLabel: UILabel!

    @IBAction func berechnenButtonPressed(sender: AnyObject) {
        let vollton = NSString(string: volltonTF.text!).doubleValue
        let raster = NSString(string: rasterTF.text!).doubleValue
        //Strings werden in Double konvertiert

        let ergebnis = ((((vollton - raster) / vollton)*100))
        //Druckkontrast wird ausgerechnet


        ergebnisLabel.text = "\(round(ergebnis*100)/100.0)"
        //Ergebnis wird auf zwei Nachkommastellen gerundet und ausgegeben.

    }
}

在确定这是我用于Textfields的十进制Pad的本地化问题之后,我使用NSNumberFormatter() floatConverter,英语声明和英语注释重建程序。 更新后的代码是

import UIKit

extension String {

    var floatConverter: Float {
        let converter = NSNumberFormatter()
        converter.decimalSeparator = "."
        if let result = converter.numberFromString(self) {
            return result.floatValue
        } else {
            converter.decimalSeparator = ","
            if let result = converter.numberFromString(self) {
                return result.floatValue
            }
        }
        return 0
    }



class ViewController: UIViewController {



    @IBOutlet weak var densityOfSolid: UITextField!
    @IBOutlet weak var densityOfTint: UITextField!

    @IBOutlet weak var resultLabel: UILabel!



    @IBAction func Calculate(sender: AnyObject) {

        let solidTF = densityOfSolid.text
        let solid = NSString(string: String(format:"%.2f", solidTF!.floatConverter)).floatValue

        let tintTF = densityOfTint.text
        let tint = NSString(string: String(format: "%.2f", tintTF!.floatConverter)).floatValue


        let result = (((solid - tint) / solid) * 100.0)
        //calculate the Printcontrast


        resultLabel.text = "\(result)"
        //give out the result on label.


    }

新问题是最后一个括号后的expected declaration错误。 我现在不知道为什么。

1 个答案:

答案 0 :(得分:0)

将值除以100除以另一个变量,并打印该值以查看正在进行的操作。

let finalValue = round(ergebnis * 100) / 100.0
println("\(finalValue)")
ergebnisLabel.text = "\(finalValue)"

将int类型划分为浮点类型可能会出现问题,而在字符串文字中执行此操作无法转换为该值。

因此,如果您想要内联计算,还可以确保将100.0除以的值为双倍。

ergebnisLabel.text = "\(Double(round(ergebnis*100)) / 100.0)"