我正在尝试在 Swift 中创建一个函数,该函数接受一个整数作为参数并以语言环境货币返回一个 double 值,例如:

输入:1250

产量:12.50 英镑

输入:12500

产出:125.00 英镑

我注意到有一个第三方库支持这一点,但不幸的是,repo 已存档。使用的单位类型是最小的货币类型,即小单位。

网络电话

/// GET - Retrive a feed of transactions during a certain period
static func get(accountUID: String, categoryUID: String, queryStartDate: String, queryEndDate: String , completionHandler: @escaping ([FeedItem], Error?) -> Void) {
    let sessionObject : URLSession = URLSession.shared
    let taskObject = sessionObject.dataTask(with: URLS().feedURLObject(accountUID,categoryUID,queryStartDate,queryEndDate)) { (Data, Response, Error) in
        guard Error == nil else {
            return
        }
        guard let Data = Data else {
            return
        }
        do {
            let feed = try JSONDecoder().decode(Feed.self, from: Data).feedItems.filter({ (item) -> Bool in
                item.direction == Direction.out
            })
            completionHandler(feed, nil)
        } catch let error  {
            print(error.localizedDescription)
        }
    }
    taskObject.resume()
}

模型馈送结构量
struct Amount: Codable {
let currency: Currency
let minorUnits: Int}

单项 JSON 响应
FeedItem(feedItemUid: "0651afe9-f568-4623-ad26-31974e26015c", categoryUid: "a68f9445-4d59-44e5-9c3f-dce2df0f53d2", amount: Banking_App.Amount(currency: Banking_App.Currency.gbp, minorUnits: 551), sourceAmount: Banking_App.Amount(currency: Banking_App.Currency.gbp, minorUnits: 551), direction: Banking_App.Direction.out, updatedAt: "2020-02-04T14:09:49.072Z", transactionTime: "2020-02-04T14:09:48.743Z", settlementTime: "2020-02-04T14:09:48.992Z", source: Banking_App.Source.fasterPaymentsOut, status: Banking_App.Status.settled, counterPartyType: Banking_App.CounterPartyType.payee, counterPartyUid: Optional("fed4d40b-9ccc-411d-81c7-870164876d04"), counterPartyName: Banking_App.CounterPartyName.mickeyMouse, counterPartySubEntityUid: Optional("d6d444c0-942f-4f85-b076-d30c2f745a6f"), counterPartySubEntityName: Banking_App.CounterPartySubEntityName.ukAccount, counterPartySubEntityIdentifier: "204514", counterPartySubEntitySubIdentifier: "00000825", reference: Banking_App.Reference.externalPayment, country: Banking_App.Country.gb, spendingCategory: Banking_App.SpendingCategory.payments)

谢谢

最佳答案

货币应该是 never be represented using floating point 类型,如 double。简短的原因是浮点数是基数为 2 的数字,使用它们来表示基数为 10 的数字会导致舍入错误。

要使用的货币的正确数据类型是 INCurrencyAmount 或类似的东西。它的属性是用于金额的 NSDecimalNumber 和用于表示货币的 NSString

您可以使用 Swift 类型 NSDecimalNumber 代替 Decimal 。它还定义了常见的数学运算符,如 +* 等。

关于ios - 在 Swift 中使用货币,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60172621/

10-14 23:29