2016-02-16 5 views
0

Я пытаюсь сделать приложение, которое позволяет вводить высоту и соотношение, и оно будет вычислять площадь и так далее. Но когда я набираю let's ay 4,2 или 4.2, он падает или говорит о плохом выполнении. Я пробовал разные способы объявления, но я, вероятно, ошибаюсь. Я попробовал Float и Double без везения. Я буду очень благодарен за любую помощь.Примите десятичные знаки

let atext: Int? = Int(radien.text!) 
let btext: Int? = Int(höjden.text!) 
let ctext: Int? = Int(sidan.text!) 

let myInt = (atext! * atext!) 
let tre = 3 

let myInt2 = Double(myInt) * Double(M_PI) * Double(btext!) 

let result = Float(myInt2)/Float(tre) 
volymenSvar.text = "\(result)" 

ответ

1

Ваша проблема заключается в том, что вы приехали сила разворачивает aText и он терпит неудачу.

aText определяются как Int(radien.text!), который может не в два раза (radien.text! Может потерпеть неудачу, и его литье в Int может не также)

Что следует делать, если бросить этот текст Double разрешить использование десятичного номер. Кроме того, вы должны использовать conditionnal связывания, как в следующем примере:

В функции поместите следующий код:

guard let radien = radien.text, höjden = höjden.text, sidan = sidan.text else { return } 

let atext: Double? = Double(radien) 
let btext: Double? = Double(höjden) 
let ctext: Double? = Double(sidan) 

if let a = atext, b = btext, c = ctext { 
    let myInt = (a * a) 
    let tre = 3 

    let myInt2 = Double(myInt) * Double(M_PI) * Double(b) 

    let result = Float(myInt2)/Float(tre) 
    print("\(result)") 
} 

Заявление охранника предотвратит вас от ошибок, если нет текста в ваших TextFields.

conditionnal связывания (if let) предотвратит вас от сбоев, если преобразование текста Удвоить не удалось

+0

Привет спасибо за ваше время, но когда я вставить этот code i Получить это сообщение «Невозможно вызвать инициализатор для типа« Двойной »с помощью списка аргументов типа (UITextField!)» «Но только на том, чтобы btext вы знаете, что это решительно? – Kevin

+0

Исправлен ответ, я неправильно использовал höjden как hödjen –

+0

Но теперь я получаю сообщение об ошибке «Postfix» = «зарезервировано» на guard let – Kevin

-1

Почему бы не так?

var atext = radien.text.floatValue 
var btext = höjden.text.floatValue 
var ctext = sidan.text.floatValue 

var myInt = (atext * atext) 
let tre = 3 

var myInt2 = myInt * Double(M_PI) * btext 

var result = myInt2/tre 
volymenSvar.text = "\(result)" 
+0

HI @Boomerannge Это dosen't работа для меня, я получаю сообщение об ошибке, в котором говорится: «Двоичный оператор * *» не может быть применен к двум операндам «String» «В var myInt = (atext * atext) – Kevin

+0

@Kevin Плохо, попробуйте var atext = radien.text.floatValue. У меня нет моего Mac, поэтому я не могу попробовать ваш код. Ответ на Mert должен работать: пусть NumberFormatter = NSNumberFormatter() пусть число = numberFormatter.numberFromString (atext) пусть numberFloatValue = number.floatValue – Boomerange

+0

Ok благодаря @Boomerannge – Kevin

0

Попробуйте это решение:

func asd() 
    { 
     let atext = getNumberFromString(radien.text) 
     let btext = getNumberFromString(höjden.text) 
     let ctext = getNumberFromString(sidan.text) 

     let myInt = (Double(atext) * Double(atext)) 

     let tre = 3 

     let myInt2 = Double(myInt) * Double(M_PI) * Double(btext) 

     let result = Float(myInt2)/Float(tre) 
     volymenSvar.text = "\(result)" 
    } 

    func getNumberFromString(string:String?) -> NSNumber 
    { 
     var result:NSNumber = 0 
     if let aString = string 
     { 
      let formattedString = aString.stringByReplacingOccurrencesOfString(",", withString: ".") 
      let formatter = NSNumberFormatter.init() 
      let number:NSNumber? = formatter.numberFromString(formattedString) 
      if let aNumber = number 
      { 
       result = aNumber 
      } 
     } 
     return result 
    } 
+0

спасибо за помощь @Che – Kevin

+0

Добро пожаловать @Kevin – Che

Смежные вопросы