7
我可以使用哪些數據類型來解析Java BigDecimal
?在Objective-C中,可以使用NSDecimalNumber
來完成。我有Swift原生解決方案嗎(不使用NSDecimalNumber
)?Swift中的Java BigDecimal
我可以使用哪些數據類型來解析Java BigDecimal
?在Objective-C中,可以使用NSDecimalNumber
來完成。我有Swift原生解決方案嗎(不使用NSDecimalNumber
)?Swift中的Java BigDecimal
這可能不是你想要的,正如你所說的swift原生解決方案。 但是在Swift 3中,一個基於C結構的舊的NSDecimal
被導入爲Decimal
,並且對它進行了大規模的重新安排,說「它幾乎是Swift本地」。
let deca = 1.23 as Decimal //<- This actually may produce some conversion error, while `ExpressibleByFloatLiteral` uses `Double` as an intermediate value.
let decb = 0.01 as Decimal
print(deca + decb == 1.24) //->true
UPDATE添加了一個簡單的例子,在那裏你可以找到雙計算錯誤(二進制浮點系統)。 (在Xcode 8 beta 6中測試)。
let dblc = 0.000001
let dbld = 100 as Double
let dble = 0.0001
print(dblc * dbld == dble) //->false (as Double cannot represent decimal fractions precisely)
let decc = Decimal(string: "0.000001")! //<- avoiding conversion error
let decd = 100 as Decimal //<- integer literal may not generate conversion error
let dece = Decimal(string: "0.0001")!
print(decc * decd == dece) //->true
只需使用'NSDecimalNumber'。它從Swift工作正常。 – Rob
你不明白。我想Swift解決方案的本地(當然,如果存在)。 – SerjOxo
我明白。 「本機」解決方案不存在。但'NSDecimalNumber'工作正常。如果你願意,你可以定義運算符,使其更像本地解決方案,所以像'+','''等運算符按照你的預期工作。 – Rob