• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Tipps und Hilfe für Objektive C Neuling

TheNman

Grahams Jubiläumsapfel
Registriert
28.06.08
Beiträge
104
Hi,

Ich hab mich jetzt mal dazu durchgerungen und will jetzt mal mein erstes Programm fürs iphone schreiben, das nur eine Rechnung machen soll.
Ich hab jetzt aber ein paar Probleme bei denen Ich net weiter weiß.
1. Ich hab den Inhalt eines Textfelds und will den vom Typ text in ein float umwandeln, sodass man damit rechen kann.
2. Dann will ich eine Rechnung machen und die direkt als float in ein Label schreiben. Geht das, oder muss ich das zuerst das Ergebnis in einer Variable speichern und dann in einen String umwandeln um das auszugeben?
3. Kann ich die Textfelder am iphone so einstellen, das man nur ganze Zahlen eingeben kann.

Danke schon mal für eure Antworten und ich bin mir net so sicher, ob das schon alle Fragen waren.;)
 

sumpfmonsterjunior

Morgenduft
Registriert
17.03.05
Beiträge
167
Hi,

ja das geht alles, aber bitte bitte lies die Dokumentation von Apple, gerade diese "Urschleim"-Sachen stehen nirgendwo besser geschrieben. http://developer.apple.com, im übrigen sind sie im iPhone SDK enthalten. Kleiner Tip zu Frage 1 und 2: NSNumber, NSString, UITextField
Frage 3: geht im InterfaceBuilder, Stichwort Formatter.

Abkürzen könnte man das auch mit RTFM :(

Gruß, SMJ
 
Zuletzt bearbeitet:

TheNman

Grahams Jubiläumsapfel
Registriert
28.06.08
Beiträge
104
Ich hab jetzt so weit mal ein Programm am laufen nur jetzt hab ich ein Problem. Das iphone soll ein paar Fakultäten berechnen. Das dumme daran ist nur das die Zahlen ganz schnell ganz groß werden. Ich hab aber gesehen, das der Taschenrechner im iphone bis zu 160 stellen hinterm Komma schafft, aber bei mir macht das iphone immer nach ca. 23 Stellen schlapp und ich habe einen Überlauf.
Kann ein Double bzw. ein Float auch diese großen Werte annehmen oder ist da bei ca. 23 Stellen immer ein Überlauf egal welche Variable ich verwende?

Ich bedanke mich schon mal für Antworten
 

zottel

James Grieve
Registriert
11.07.08
Beiträge
133
Ich habe zwar noch wenig Erfahrung mit Cocoa/iPhone, aber ganz allgemein: Bist Du sicher, dass Du 160 Stellen hinter dem Komma meinst, gerade bei Fakultäten?

Ansonsten würde ich vermuten, dass der Taschenrechner von Apple einfach mit Doubles rechnet. Damit hast Du eine Art Computerrepräsentation von wissenschaftlicher Notation, d.h. sowas wie 1,2346 x 10^17. In diesem Beispiel hättest Du zwar 17 Stellen vor dem Komma (ich denke, dass Du das meinst), das sagt aber noch nichts über die Genauigkeit aus. Will sagen (weiter nur ein Beispiel): Möglicherweise wäre Dein Ergebnis eigentlich 12345678901234567 gewesen, aber dafür hat eben die Genauigkeit nicht gereicht. Der Taschenrechner könnte das dann wieder als normale dezimale Zahl darstellen, ohne die Genauigkeit zu berücksichtigen, und in diesem Beispiel würde er 12346000000000000 darstellen, obwohl das so nicht wirklich stimmt.

Achtung: Das ist hier nur ein Beispiel, ich weiß nur ungefähr, wie Floating-Point-Arithmetik funktioniert, und zum Beispiel nicht einmal, ob überhaupt zur Basis 10 oder etwa zu Basis e gerechnet wird, und ich weiß auch nicht, bis zu welcher Stelle hinter dem Komma in wissenschaftlicher Notation man einem Float oder Double halbwegs vertrauen kann. Die Grundaussage stimmt aber; die Genauigkeit ist begrenzt, und sehr große ganzzahlige Werte können nicht genau repräsentiert werden.

Was Du brauchst ist eine BigInt-Library, also eine Library, mit der man sehr große Integer-Werte genau verarbeiten kann. Nachdem es in der der CoreFoundation C-Funktionen gibt, mit denen RSA-Verschlüsselung verarbeitet werden kann, müsste es auch Möglichkeiten geben, mit sehr großen Integer-Werten umzugehen. Das funktioniert aber nicht mit den ganz normalen Rechenfunktionen, und ich kann Dir auch nicht sagen, welche Funktionen Du benutzen musst. Selber suchen. ;)

Viele Grüße,

Christian
 

TheNman

Grahams Jubiläumsapfel
Registriert
28.06.08
Beiträge
104
Hmm, das geht mir nicht um Dezimalzahlen (-> Fakulät) deshalb dachte ich, das ich den mit dem Double arbeiten kann. Meine Frage war eher so gedacht, ob eine double Variable Größere Zahlen speichern kann als eine Variable vom Typ float.
Danke für schnelle Antwort und tut mir leid, das ich das etwas umständlich bzw. unklar formuliert hab.
@zottel
nee sorry das war vor dem Komma. Da hast du schon recht und auf die Genauigkeit kann ich auch verzichten, das spielt im weiteren Verlauf keine große Rolle mehr.
Und MS Office 03 kann auch nur Fakultäten bis genau 69 errechnen, größere Werte gehen nur mit dem neuen 08. ;)
 

zottel

James Grieve
Registriert
11.07.08
Beiträge
133
Nicht unbedingt größere Zahlen (obwohl evtl. auch der Exponent mehr Speicher bekommt, weiß ich nicht), aber auf jeden Fall genauere.

Erläuterndes Beispiel: Angenommen, Float hätte 5 gültige Ziffern, Double 10. Immer dran denken: In Floating Point hast Du im Speicher nicht "12345" stehen, sondern etwas Ähnliches wie "1,2345 x 10^5".

Das bedeutet: Sowohl mit Float als auch mit Double könntest Du in diesem Beispiel eine zehnstellige Integerzahl repräsentieren; nehmen wir 1234567890. Double wäre damit 1,234567890 x 10^10, Float könnte aber nur 5 gültige Ziffern aufnehmen, das wäre dann 1,2345 x 10^10 – zurückkonvertiert in „normale“ Notation wäre das dann aber 1234500000, also ungenau.

Wiederum: Nur ein Beispiel zur Verdeutlichung, in Wirklichkeit ist das alles nur ungefähr so. ;)

Ich glaube (weiß aber nicht sicher), dass Double außerdem auch mehr Stellen im Exponenten erlaubt und damit tatsächlich auch größere Zahlen repräsentieren könnte.
 

TheNman

Grahams Jubiläumsapfel
Registriert
28.06.08
Beiträge
104
Um mal zu einem Endergebnis zum kommen schreibe ich mal das auf was ich durch Beobachtung gesehen hab:
Am Besten verwendet man Variablen vom Typ Double or NSDecimalNumber: Bei mir haben beide Typen von Variablen bei ungefähr gleichen Exponenten (ca. 250) einen Überlauf. Damit kann man schon recht ordentliche Werte berechnen. Im Gegensatz zu float Variablen sind sie auch genauer, da sie mehr Stellen hinterm Komma speichern (siehe Beitrag #7)
Ich bedanke ich nochmal bei allen die mir geholfen haben.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
NSDecimalNumber ist das einzige, was Dich bei kaufmännischen Berechnungen glücklich machen wird.

Alex
 

TheNman

Grahams Jubiläumsapfel
Registriert
28.06.08
Beiträge
104
Ich hab ja eh nur ganze Zahlen und ich hab die nur ausprobiert, weil das da oben stand^^. Ich hab bei mir noch meine Doubles benutzt.