2016-04-09 20 views
0

Ich ein Array erstellen, legen Sie den Standardwert 0,3, nach 0,29999999999999999, warum ist das so? enter image description hereErstellen eines Array mit einem Standardwert, aber der Standardwert ist

+2

Generell gilt: Wenn Sie Float-Zahlen vergleichen müssen, verwenden Sie nicht 'Double'. Sie können die Dezimalstellen als "Int" trennen oder einfach "NSDecimalNumber" verwenden. – Eendje

+0

Vielen Dank für Ihren Rat! – ChildrenGreens

+0

Nicht zu verwechseln mit 'NSDecimal', die Sie nicht verwenden sollten. – BallpointBen

Antwort

4

Dies ist wegen der binären Darstellung der Fließkommawerte. Einige Gleitkommawerte können im angegebenen Speicherbereich nicht exakt dargestellt werden. Daher werden sie auf einen passenden Wert gerundet. Überprüfen Sie diesen Beitrag für weitere Details über this. Wenn Sie dies vermeiden möchten, haben die meisten Programmiersprachen einen Datentyp, der die Arithmetik der Basis 10 verwendet und diese Einschränkung nicht aufweist. Für swift ist das NSDecimalNumber, aber bitte beachten Sie, dass dieser Datentyp normalerweise viel langsamer ist.

+0

Ich verstehe Ihre Bedeutung, Ihre Erklärung ist sehr gut, vielen Dank! – ChildrenGreens

1

Es ist eigentlich ziemlich einfach. Wenn Sie ein Basis-10-System haben (wie unseres), kann es nur Brüche ausdrücken, die einen Primfaktor der Basis verwenden. Die Primfaktoren von 10 sind 2 und 5. Also können 1/2, 1/4, 1/5, 1/8 und 1/10 sauber ausgedrückt werden, da die Nenner alle Primfaktoren von 10 verwenden. Im Gegensatz dazu 1/3, 1/6 und 1/7 sind alle sich wiederholenden Dezimalzahlen, weil ihre Nenner einen Primfaktor von 3 oder 7 verwenden. In binär (oder Basis 2) ist der einzige Primfaktor 2. Also können Sie nur Brüche sauber ausdrücken nur 2 als Primfaktor enthalten. Im Binärformat würden 1/2, 1/4, 1/8 alle sauber als Dezimalzahlen ausgedrückt. Während 1/5 oder 1/10 Dezimalzahlen wiederholen würde. So 0,1 und 0,2 (1/10 und 1/5) während Dezimalstellen sauber in einem System der Basis 10 sind, wiederholen Dezimalstellen in der Basis 2 System, in dem der Computer arbeitet. Wenn Sie Mathe auf diese wiederholenden Dezimalzahlen, Sie am Ende mit Resten die übertragen, wenn Sie die Basis 2 (Binärzahl) des Computers in eine besser lesbare Basis 10 Nummer konvertieren.

weitere Details:

http://0.30000000000000004.com/