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