Jakiego typu danych mogę użyć do analizy Java BigDecimal
? W Objective - C można to zrobić za pomocą NSDecimalNumber
. Czy mam rozwiązanie natywne Swift (bez użycia NSDecimalNumber
)?Java BigDecimal w Swift
7
A
Odpowiedz
7
To może nie być to, co chcesz, jak mówisz szybkie rozwiązanie natywne. Ale w Swift 3, stare C-struct oparte na NSDecimal
zostało zaimportowane jako Decimal
, a duża reorganizacja dla niego została zrobiona, aby powiedzieć "jest prawie 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 Dodany prosty przykład, gdzie można znaleźć błędu obliczeniowego double (binarny system punktowy pływającej). (Testowane w 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
Powiązane problemy
- 1. Użycie pamięci Java BigDecimal?
- 2. tryb zaokrąglania z BigDecimal Java
- 3. Możliwy błąd przepełnienia Java BigDecimal
- 4. Co to jest python dla BigDecimal Java?
- 5. Java BigDecimal usuwa liczby dziesiętne i końcowe
- 6. BigDecimal w JavaScript
- 7. Konwertuj numer Java na BigDecimal: najlepszy sposób
- 8. Konwertuj int na BigDecimal z dziesiętną - Java
- 9. Serializacja BigDecimal w GWT
- 10. BigDecimal w Javie
- 11. BigDecimal nie może być wymuszony na BigDecimal
- 12. Kanoniczna reprezentacja BigDecimal
- 13. Jak przekonwertować BigDecimal na Double w Javie?
- 14. Swift odpowiednik Java .toString()
- 15. Wyodrębnij liczbę dziesiętną w BigDecimal
- 16. utrata precyzji konwersji z java BigDecimal na podwójne
- 17. Java: podziel dwa obiekty BigInteger na obiekt BigDecimal
- 18. Generowanie Java JaxB, Jak mogę uzyskać bigDecimal z mojego xsd?
- 19. Java - jak zaokrąglić wartość float (lub BigDecimal) o 0,5?
- 20. BigDecimal optymalną skalę kodowania
- 21. BigDecimal na ciąg
- 22. BigDecimal setScale and round
- 23. Jak dodać do BigDecimal
- 24. Konwersja BigDecimal do Integer
- 25. jak przekonwertować procentowy ciąg do BigDecimal?
- 26. Dlaczego BigDecimal ("5,50") nie jest równy BigDecimal ("5,5") i jak obejść ten problem?
- 27. Ustaw wszystkie operacje BigDecimal na określoną precyzję?
- 28. Jak utworzyć losowy BigDecimal w Javie?
- 29. Jak indeksować wartości BigDecimal w Lucene 3.0.1
- 30. W jaki sposób wdrażany jest BigDecimal?
Po prostu użyj 'NSDecimalNumber'. Działa dobrze od Swift. – Rob
Nie rozumiesz. Chcę natywnego rozwiązania Swift (oczywiście, jeśli istnieje). – SerjOxo
Rozumiem. "Natywne" rozwiązanie nie istnieje. Ale 'NSDecimalNumber' działa dobrze. A jeśli chcesz, możesz zdefiniować operatory, które sprawiają, że zachowuje się bardziej jak natywne rozwiązanie, więc operatory takie jak '+', '-' itd. Działają tak, jak się spodziewasz. – Rob