在Swift中使用货币

问题描述 投票:1回答:1

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

输入:1250

输出:12.50英镑

输入:12500

输出:£125.00

我注意到有一个支持此功能的第三方库,但不幸的是该回购已存档。使用的单位类型是货币的最小类型为minorUnits。

网络通话

/// 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(货币:.Currency.gbp,minorUnits:551),sourceAmount :.Amount(currency:.Currency.gbp,minorUnits:551),方向:.Direction.out,更新时间:“ 2020-02-04T14:09:49.072Z”,transactionTime:“ 2020-02-04T14:09:48.743 Z”,结算时间:“ 2020-02-04T14:09:48.992Z”,来源:.Source.fasterPaymentsOut,状态:.Status.settled,counterPartyType:.CounterPartyType.payee,counterPartyUid:可选(“ fed4d40b-9ccc-411d- 81c7-870164876d04“),counterPartyName:.CounterPartyName.mickeyMouse,counterPartySubEntityUid:可选(” d6d444c0-942f-4f85-b076-d30c2f745a6f“),counterPartySubEntityName:.CounterPartySubEntityName.ukAccount,counterPartySub” SubIdentityIdentifier825“ :.Reference.externalPayment,国家/地区:.Country.gb,支出类别:.SpendingCategory.payments)

谢谢

ios swift currency
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.