Ios 测试设备上的结果始终为100
我写了这个小计算器,它在模拟器上运行得非常好,但是如果我在我的iPhone6上测试并运行它,结果总是Ios 测试设备上的结果始终为100,ios,swift,Ios,Swift,我写了这个小计算器,它在模拟器上运行得非常好,但是如果我在我的iPhone6上测试并运行它,结果总是100 不管我是否在最后取整结果,结果都是一样的:100.0 import UIKit class maininterfaceVC: UIViewController { @IBOutlet weak var volltonTF: UITextField! @IBOutlet weak var rasterTF: UITextField! @IBOutlet we
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.
}
}
在发现这是我用于文本字段的十进制键盘的本地化问题后,我使用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.
}
新问题是在最后一个括号后出现预期声明
错误。
我现在不知道为什么。在另一个变量中将值除以100,然后打印该值以查看发生了什么
let finalValue = round(ergebnis * 100) / 100.0
println("\(finalValue)")
ergebnisLabel.text = "\(finalValue)"
看起来可能存在将int类型除以浮点类型的问题,在字符串文本中执行此操作无法转换为该值
因此,如果要进行内联计算,还可以确保要除以100.0
的值是双精度的
ergebnisLabel.text = "\(Double(round(ergebnis*100)) / 100.0)"
请尝试使用调试器或添加打印语句,以准确找出导致问题的行。目前看来,似乎没有任何明显的问题。第一:你应该用英语注释你的代码。第二:这同样适用于变量命名。第三:你的标题说结果总是1,后来你说结果总是100。谢谢你的回答,我发现了问题。这不是一个数据类型问题,问题是我对文本字段使用了小数点。在模拟器中,键盘上有一个
,一切正常。但是在我的设备上是一个,
而不是
你有什么办法吗?这是本地化的问题,你可以用它来帮你解决。或者,在将文本字段转换为双精度之前,您可以手动将输入中出现的所有,
替换为,
。您好,请查看问题中的新代码好吗?:)非常感谢。