2017-03-14 29 views
5

我知道float或double不适合存储十进制数字,如金钱和数量。我试图使用NSDecimalNumber来代替。这是我在Swift操场上的代码。如何将1.66存储在NSDecimalNumber中

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

控制台输出1.6599999999999995904

我怎么能存储在一个变量的十进制数1.66的确切价值?

+0

检查了这一点。 http://stackoverflow.com/a/31070910/2975371 – Danieboy

+0

谢谢@Danieboy。我是新来的迅速。你能否提供示例代码,说明如何将1.66完全保存在变量中? – Joey

回答

8

let number:NSDecimalNumber = 1.66 

右手侧是不能代表 值“1.66”恰好一个浮点数。一种选择是从字符串创建十进制数 :

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

另一种选择是使用算术:

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

与SWIFT 3,你可以考虑使用“叠加值类型” Decimal代替,例如

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

还有另一个选择:

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