Gewinn Berechnen mit Xcode SwiftUI?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Dein Textfeld gibt ja auch einen String zurück und "5" + "5" ist dann natürlich "55".

Du musst deinen Text natürlich noch in Integers umwandeln, was im einfachsten Fall so geht:

Text("\(Int(anlage)! + Int(kauf)!)€")

Allerdings ist das fehleranfällig, da es bei nicht-Zahlen zu einer Exception kommen würde. Deshalb lieber mit Überprüfung:

if let a = Int(anlage), let b = Int(kauf) {
  Text("\(a + b) €")
} else {
  Text("Fehler: Bitte Zahlen eingeben!")
}
Woher ich das weiß:Berufserfahrung – Entwickle Anwendungen für iOS, iPadOS und macOS beruflich.
alpacacookie 
Fragesteller
 06.04.2021, 11:09

VIELEN DANK! Hat mir weiter geholfen! Bin neu und lerne gerade erst. Kann man noch die Kommastellen, die rauskommen, runden? Hab von Int auf Double gestellt, da mir die zwei Kommastellen wichtig sind. Kann ich diese Runden wenn ich beim Ergebnis z.B. 6,7778 aber möchte 6,78? Danke!

0
Babelfish  06.04.2021, 11:29
@alpacacookie

Zum Runden gibt es verschiedene Möglichkeiten. Eine ist die hier:

if let a = Double(anlage), let b = Double(kauf) {
	Text("\(((a + b) * 100).rounded() / 100) €")
}

Also Ergebnis mal 100, dann runden und dann durch 100 = 2 Stellen Genauigkeit.

0
alpacacookie 
Fragesteller
 06.04.2021, 11:36
@Babelfish

Habe bei mir meine Gleichung angepasst, diese funktioniert auch. Kann ich die Nullen auch ausblenden?

Wenn ich rechne a = 50, b = 41000, c = 50000 kommt der gerundete Betrag raus, also 10,980000. Nur mit den Nullen.

if let a = Double(anlage), let b = Double(kauf), let c = Double(verkauf) {
           Text("\(((a / b * c - a) * 100).rounded() / 100) €")}
0
Babelfish  06.04.2021, 11:50
@alpacacookie

Also bei mir wird da genau 10.98 € ausgegeben. Sicher, dass du den Code so drin stehen hast?

0
alpacacookie 
Fragesteller
 06.04.2021, 11:54
@Babelfish
var body: some View {
        NavigationView {
            Form {
                Section(header: Text("Anlagebetrag")) {
                    
                    TextField("Anlagebetrag in EUR", text: $anlage)
                        .keyboardType(.decimalPad)
                        }
                    
                Section(header: Text("Kaufkurs in EUR pro Stück")) {
                    
                    TextField("Kaufkurs in EUR", text: $kauf)
                        .keyboardType(.decimalPad)
                        }
                
                Section(header: Text("Verkaufskurs in EUR pro Stück")) {
                    
                    TextField("Verkaufskurs in EUR", text: $verkauf)
                        .keyboardType(.decimalPad)
                        }
                Section(header: Text("Gewinn")) {
                
                    if let a = Double(anlage), let b = Double(kauf), let c = Double(verkauf) {
                               Text("\(((a / b * c - a) * 100).rounded() / 100) €")}
                   

0
Babelfish  06.04.2021, 12:20
@alpacacookie

Double zu String verhält sich unter iOS offenbar anders, als unter macOS. Das muss ich mir auch noch mal genauer anschauen.

Eine einfache Lösung für dich wäre:

Text("\(String(format: "%.2f", a / b * c - a)) €")
1

Was genau kriegst du nicht hin?

Habe zwar nichts mit Swift zu tun, aber es hilft viele und scheinbar unnötige Klammern zu setzen.

Die Operatoren (+ - * /) kennst du bestimmt.

Auf Typen achten

https://docs.swift.org/swift-book/LanguageGuide/BasicOperators.html

alpacacookie 
Fragesteller
 06.04.2021, 10:03

Das Problem: Bei Zeile 37 addiere ich Variable Anlage und Kauf als Test. Das Problem: es wird nicht addiert, sondern quasi hintereinander angereiht. Also: 5 + 5 = 55 und nicht 10 oder 7 + 4 = 74 und nicht 11. Und wenn ich statt dem + ein -, ein / oder ein * einfüge bekomme ich folgende Meldung: Binary operator '*' cannot be applied to two 'String' operands

0
Simon221585  06.04.2021, 10:29
@alpacacookie
Und wenn ich statt dem + ein -, ein / oder ein * einfüge bekomme ich folgende Meldung: Binary operator '*' cannot be applied to two 'String' operands

Deine Zahlen sollten auch Zahlen sein? Du kannst kein * auf einen String anwenden. Du musst schon den Typ einer Zahl verwenden. Unter deinem Struct hast du alles als String initialisiert.

Eine Plus Operation geht bestimmt bei Strings. Die werden dann wohl zusammengesetzt, nur du willst rechnen und nicht Strings zusammensetzen, du brauchst einen anderen Datentyp, der eine Zahl repräsentiert.

https://www.tutorialspoint.com/swift/swift_data_types.htm

int für normale Zahlen, also Ganze Zahlen, Double & float für welche mit Nachommastellen. In der Tabelle ist alles beschrieben, auf ranges achten.

1