2015-02-09 42 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