2016-06-01 9 views
0

Ich habe gelesen, dass ich Preise nicht als double Zahlen behandeln sollte und dass ich sie als zwei ganze Zahlen speichern sollte.Wie man einen Preis in zwei Ganzzahlen in swift speichert

Wenn ich zum Beispiel einen Eingang vom Typ 246.464 in einem UITextField habe, wie soll ich es zwei ganze Zahlen machen?

+0

Vielleicht finden Sie Präzisionsprobleme mit BIG 'float', aber ich bezweifle, dass Sie irgendein Problem mit' double' finden. – redent84

+1

Was meinst du damit, du wirst keine Präzisionsfehler finden? 'var y = 0,1 + 0,1 + 0,1; print (y == 0.3) ' –

+1

Beachten Sie auch, dass Sie nicht Dezimal-Teil als nur eine ganze Zahl darstellen können, Sie brauchen auch einen Exponenten. Zum Beispiel würden "0,1" und "0,01" beide als "0" und "1" dargestellt, so dass Sie einen Exponenten ("1" und "2") brauchen, um zwischen ihnen zu unterscheiden. Oder speichern Sie einfach die Ganzzahl '246464' und speichern Sie den Exponenten' 3' (Anzahl der Dezimalstellen). Genau das macht Fließkomma-Mathematik und was 'NSDecimalNumber' macht. – Sulthan

Antwort

5

Vergessen Sie zwei ganze Zahlen, speichern Sie es als NSDecimalNumber. Das ist die Klasse, die speziell für diese Aufgabe erstellt wurde.

Im Gegensatz zu float oder double verwendet NSDecimalNumber dekadische Arithmetik, daher gibt es keinen Verlust an Genauigkeit bei der Konvertierung zwischen dekadischen zu binären und umgekehrt.

let text = "246.464" // textField.text 
let number = NSDecimalNumber(string: text)