2017-03-14 25 views
5

Float veya double, para ve miktar gibi ondalık sayıları depolamak için iyi olmadığını biliyorum. Bunun yerine NSDecimalNumber kullanmaya çalışıyorum. Swift oyun alanımdaki kodum.NSDecimalNumber içinde 1.66 depolanır.

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

konsol çıkış bir değişkende ondalık sayı 1,66 kesin değerini saklayabilir nasıl 1,6599999999999995904

mı?

let number:NSDecimalNumber = 1.66 

sağ taraftaki ise

+0

Kontrol şuna. http://stackoverflow.com/a/31070910/2975371 – Danieboy

+0

Teşekkürler @Danieboy. Ben hızlıca yeniyim. 1.66 tam olarak bir değişkende nasıl saklanacağını örnek kodunu verebilir misiniz? – Joey

cevap

8

değeri "1,66" tam olarak temsil edemez bir kayan nokta sayısıdır.

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

Swift 3 ile "bindirme değer türü" Decimal yerine kullanmak düşünebilirsiniz:

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

Başka bir seçenek aritmetik kullanmaktır: Seçeneklerden biri bir dize gelen ondalık sayı yaratmaktır , Örneğin

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

Henüz başka bir seçenek:

let num = Decimal(sign: .plus, exponent: -2, significand: 166) 
print(num) // 1.66 
İlgili konular