2016-08-23 5 views
7

Javaの解析に使用できるデータ型はどれですか?BigDecimal? Objective-Cでは、NSDecimalNumberを使って実行できます。スウィフトネイティブソリューション(NSDecimalNumberを使用しない)はありますか?SwiftのJava BigDecimal

+3

「NSDecimalNumber」を使用してください。それはSwiftからうまく動作します。 – Rob

+0

あなたはわかりません。私はSwiftソリューションのネイティブが必要です(もちろん、存在する場合)。 – SerjOxo

+0

わかりました。 「ネイティブ」ソリューションは存在しません。しかし、 'NSDecimalNumber'は正常に動作します。また、必要に応じて、ネイティブソリューションのように動作するように演算子を定義して、 '+'、 ' - 'などの演算子を期待どおりに動作させることができます。 – Rob

答えて

7

迅速なネイティブソリューションと言っているように、これはあなたが望むものではないかもしれません。 Swift 3では、古いC-structのNSDecimalDecimalとしてインポートされています。これは、 "それはほぼスウィフトネイティブです"と言って大きな変更が行われました。

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はあなたがダブル(2進浮動小数点システム)で計算エラーを見つけることができる簡単な例を、追加しました。 (Xcode 8ベータ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