我有一个iOS应用程序将对代表美元货币的数字(例如25.00代表$ 25.00)执行大量基本算术运算。我使用哪种Swift数据类型用于货币
我在Java和Javascript等其他语言中使用数据类型Double时遇到了很多麻烦,所以我想知道在Swift中使用货币的最佳数据类型。
我有一个iOS应用程序将对代表美元货币的数字(例如25.00代表$ 25.00)执行大量基本算术运算。我使用哪种Swift数据类型用于货币
我在Java和Javascript等其他语言中使用数据类型Double时遇到了很多麻烦,所以我想知道在Swift中使用货币的最佳数据类型。
使用NSDecimalNumber
(more 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
类。
此方法是否保留小数点后的位数?或者它会创建一个小数点的近似值,可以延伸许多数字通过小数点? – PeonProgrammer 2015-02-10 16:08:21
我最喜欢这种方法,因为它感觉最容易使用。 – PeonProgrammer 2015-02-10 16:14:46
为什么不直接赚钱呢? – Rob 2015-12-03 18:56:54
有一个非常好的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')类型的操作数
这个类的警告:它不符合NSCoding,这意味着您将无法使用NSCoder保存Money类型的值。 Xcode会抛出一个错误。 – 2017-04-12 08:31:25
Ju st好奇,在使用double作为货币的数据类型时遇到了什么样的问题? – userx 2015-02-09 23:04:37
@AbhishekMukherjee我遇到了比较值的问题。当我认为5.20 == 5.20它实际上是5.200000001 == 5.20 – PeonProgrammer 2015-02-10 16:03:20
这已经被讨论了很多。在Java中使用的正确类型是BigDecimal。 – Rob 2015-12-03 18:11:48