2015-02-09 41 views
17

我有一个iOS应用程序将对代表美元货币的数字(例如25.00代表$ 25.00)执行大量基本算术运算。我使用哪种Swift数据类型用于货币

我在Java和Javascript等其他语言中使用数据类型Double时遇到了很多麻烦,所以我想知道在Swift中使用货币的最佳数据类型。

+1

Ju st好奇,在使用double作为货币的数据类型时遇到了什么样的问题? – userx 2015-02-09 23:04:37

+4

@AbhishekMukherjee我遇到了比较值的问题。当我认为5.20 == 5.20它实际上是5.200000001 == 5.20 – PeonProgrammer 2015-02-10 16:03:20

+1

这已经被讨论了很多。在Java中使用的正确类型是BigDecimal。 – Rob 2015-12-03 18:11:48

回答

22

使用NSDecimalNumbermore info here)。例如:

let a = NSDecimalNumber(integer: 123456) 
let b = NSDecimalNumber(integer: 1000) 
let c = a.decimalNumberByDividingBy(b) 
println(c) 
// Result: "123.456" 

你可能会想用an extension like this one添加运算符重载的NSDecimalNumber类。

+0

此方法是否保留小数点后的位数?或者它会创建一个小数点的近似值,可以延伸许多数字通过小数点? – PeonProgrammer 2015-02-10 16:08:21

+0

我最喜欢这种方法,因为它感觉最容易使用。 – PeonProgrammer 2015-02-10 16:14:46

+0

为什么不直接赚钱呢? – Rob 2015-12-03 18:56:54

4

有一个非常好的LIB称为Money

let money: Money = 100 
let moreMoney = money + 50 //150 

有很多除此之外不错的功能,如类型安全的货币:

let euros: EUR = 100 
let dollars: USD = 1500 
euros + dollars //Error 

二元运算符 '+' 不能应用于'EUR'(又名'_Money')和'USD'(又名'_Money')类型的操作数

+0

这个类的警告:它不符合NSCoding,这意味着您将无法使用NSCoder保存Money类型的值。 Xcode会抛出一个错误。 – 2017-04-12 08:31:25