Welchen Datentyp kann ich zum Parsen von Java BigDecimal
verwenden? In Objective - C kann mit NSDecimalNumber
gearbeitet werden. Habe ich Swift-native Lösung (ohne NSDecimalNumber
zu verwenden)?Java BigDecimal in Swift
7
A
Antwort
7
Dies ist möglicherweise nicht das, was Sie wollen, wie Sie sagen schnelle native Lösung. Aber in Swift 3, eine alte C-Struktur basiert NSDecimal
wird als Decimal
importiert, und eine große Umordnung dafür wurde getan, um zu sagen, "es ist fast Swift-native".
let deca = 1.23 as Decimal //<- This actually may produce some conversion error, while `ExpressibleByFloatLiteral` uses `Double` as an intermediate value.
let decb = 0.01 as Decimal
print(deca + decb == 1.24) //->true
UPDATE Added ein einfaches Beispiel, wo Sie einen Berechnungsfehler in Doppel (binär Floating-Point-System) finden können. (Getestet in Xcode 8 beta 6.)
let dblc = 0.000001
let dbld = 100 as Double
let dble = 0.0001
print(dblc * dbld == dble) //->false (as Double cannot represent decimal fractions precisely)
let decc = Decimal(string: "0.000001")! //<- avoiding conversion error
let decd = 100 as Decimal //<- integer literal may not generate conversion error
let dece = Decimal(string: "0.0001")!
print(decc * decd == dece) //->true
Verwandte Themen
- 1. Format BigDecimal in Java
- 2. BigDecimal in Java
- 3. Java BigDecimal Probleme (String zu BigDecimal - BigDecimal zu String)
- 4. Java BigDecimal Ausgabe
- 5. Double to BigDecimal Java
- 6. java BigDecimal Subaktion fehlgeschlagen
- 7. Java BigDecimal Speicherverbrauch?
- 8. Java-Eingabe Eingabeaufforderung für BigDecimal
- 9. Java BigDecimal Möglicher Überlauf Fehler
- 10. java BigDecimal arithmaticException ungültige Operation
- 11. Convert Int in BigDecimal mit Dezimal - Java
- 12. Wie konvertiert BigDecimal zu Double in Java?
- 13. Wie skaliert man ein BigDecimal in Java?
- 14. ändern 6,51-6,50 in Java BigDecimal
- 15. BigDecimal kann nicht in BigDecimal umgewandelt werden
- 16. BigDecimal in JavaScript
- 17. Java BigDecimal dezimale und nachfolgende Zahlen entfernen
- 18. Warum gibt Java BigDecimal 1E + 1 zurück?
- 19. Java, BigDecimal. Probleme mit der Division
- 20. Einfügen BigDecimal => Varchar2 Spalte VS BigDecimal => Nummer Spalte
- 21. BigDecimal-Serialisierung in GWT
- 22. Rundung mit BigDecimal?
- 23. Extrahieren der Ganzzahl und Bruchteil von Bigdecimal in Java
- 24. Wie konvertiert man von Float nach BigDecimal in Java?
- 25. Kombinieren ArrayList von Objekten und Summe auf BigDecimal in Java
- 26. Wie man ein BigDecimal mit einer Ganzzahl in Java multipliziert
- 27. Java: Unterteilen Sie zwei BigInteger-Objekte in ein BigDecimal-Objekt
- 28. BigDecimal mathematische Operationen
- 29. BigDecimal Subtraktion
- 30. kanonische Darstellung eines BigDecimal
Verwenden Sie einfach 'NSDecimalNumber'. Es funktioniert gut von Swift. – Rob
Sie verstehen nicht. Ich möchte native für Swift-Lösung (natürlich, wenn vorhanden). – SerjOxo
Ich verstehe es. Eine "native" Lösung existiert nicht. Aber 'NSDecimalNumber' funktioniert gut. Und wenn Sie möchten, können Sie Operatoren definieren, die dafür sorgen, dass sie sich mehr wie eine native Lösung verhält, sodass Operatoren wie '+', '-' usw. so funktionieren, wie Sie es erwarten. – Rob