Ich ein Array erstellen, legen Sie den Standardwert 0,3, nach 0,29999999999999999, warum ist das so? Erstellen eines Array mit einem Standardwert, aber der Standardwert ist
Antwort
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.
Ich verstehe Ihre Bedeutung, Ihre Erklärung ist sehr gut, vielen Dank! – ChildrenGreens
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:
- 1. Swift: ein Array mit einem Standardwert von verschiedenen Objektinstanzen Erstellen
- 2. Was ist der Standardwert eines Iterators?
- 3. Ist der Standardwert eines int * NULL?
- 4. C# Standardwert eines Zeigertyps
- 5. Standardwert eines Select-Tags
- 6. Einstellung Standardwert eines Html.DropDownList()
- 7. Java-Array einer Klasse mit Standardwert
- 8. PHP-Array für den Standardwert
- 9. Standardwert ist SSRS
- 10. Standardwert eines Eingangs Get jQuery
- 11. Auswahlfeld Standardwert
- 12. Scala: Verwenden von HashMap mit einem Standardwert
- 13. defaultdict mit Standardwert 1?
- 14. C# Enumerable.Take mit Standardwert
- 15. Wie ein Enum-Feld mit Standardwert erstellen?
- 16. Standardwert Speicher
- 17. Vorfüllen eines Formular-Standardwert mit einem berechneten Wert
- 18. Abstrakte Klasse mit Standardwert
- 19. Standardwert der Android-Voreinstellung
- 20. Textarea Standardwert
- 21. Javascript-Objekt mit Standardwert
- 22. Leer-Array als Array PostgreSQL Spalte Standardwert
- 23. Was ist der Standardwert für FACELETS_REFRESH_PERIOD?
- 24. automatische Eigenschaft mit Standardwert
- 25. Bash Array Wert in Standardwert Zuordnung
- 26. ActiveAdmin - Filter mit Standardwert
- 27. Was ist der Standardwert für Guid?
- 28. Warum ist der Standardwert im Storyboard ausgegraut?
- 29. Standardwert für Textbereich
- 30. eine neue SQL-Spalte mit einem Standardwert
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
Vielen Dank für Ihren Rat! – ChildrenGreens
Nicht zu verwechseln mit 'NSDecimal', die Sie nicht verwenden sollten. – BallpointBen