2017-03-14 6 views
5

浮動小数点型または倍精度浮動小数点型は、金額や数量のように10進数を格納するのには適していません。代わりにNSDecimalNumberを使用しようとしています。 Swiftの遊び場に私のコードがあります。NSDecimalNumberに1.66を格納する方法

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

コンソール出力は、私は、変数の10進数1.66の正確な値を格納することができますどのように1.6599999999999995904

のですか?

+0

がこれをチェックしてください。 http://stackoverflow.com/a/31070910/2975371 – Danieboy

+0

ありがとう@Danieboy。私は迅速にすごいです。 1.66を変数に正確に格納する方法のサンプルコードを提供できますか? – Joey

答えて

8

let number:NSDecimalNumber = 1.66 

の右側は、正確 値「1.66」を表現できない浮動小数点数です。 1つのオプションは、文字列から小数 を作成することです:

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

別のオプションは、算術演算を使用することです:あなたの代わりに「オーバーレイ値型」Decimalを使用することを考えるかもしれスウィフト3で

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

、例えば

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

は、さらに別のオプション:

let num = Decimal(sign: .plus, exponent: -2, significand: 166) 
print(num) // 1.66 
関連する問題