2017-03-14 14 views
5

Wiem, że zmienna lub podwójna nie jest dobra do przechowywania liczby dziesiętnej, takiej jak pieniądze i ilość. Próbuję użyć NSDecimalNumber zamiast tego. Oto mój kod na placu zabaw Swift.Jak przechowywać 1,66 w NSDecimalNumber

let number:NSDecimalNumber = 1.66 
let text:String = String(describing: number) 
NSLog(text) 

Wyjście konsola jest 1,6599999999999995904

Jak mogę zapisać dokładną wartość liczby dziesiętnej 1.66 w zmiennej?

+0

to sprawdzić. http://stackoverflow.com/a/31070910/2975371 – Danieboy

+0

Dzięki @Danieboy. Jestem nowy w szybkim tempie. Czy możesz podać przykładowy kod, w jaki sposób przechowywać 1,66 dokładnie w zmiennej? – Joey

Odpowiedz

8

W

let number:NSDecimalNumber = 1.66 

bok prawy jest liczba zmiennoprzecinkowa, które nie mogą reprezentować wartość „1,66” dokładnie. Jedną z opcji jest stworzenie liczbę dziesiętną z ciągiem:

let number = NSDecimalNumber(string: "1.66") 
print(number) // 1.66 

Inną opcją jest użycie arytmetyki:

let number = NSDecimalNumber(value: 166).dividing(by: 100) 
print(number) // 1.66 

Z Swift 3 można rozważyć użycie „typ nakładki wartość” Decimal zamiast np

let num = Decimal(166)/Decimal(100) 
print(num) // 1.66 

Jeszcze inna opcja:

let num = Decimal(sign: .plus, exponent: -2, significand: 166) 
print(num) // 1.66 
Powiązane problemy