let highDouble = 1.7976931348623e+308 // Just under Double.greatestFiniteMagnitude
print(highDouble) // 1.7976931348623e+308
let highDecimal = Decimal(highDouble)
print(highDecimal) // 17976931348623005696000000000000000000000000000000000
これは私が入れものではありません、私はその裏Double
に持ち込む場合は明確にするために、:。Decimalは高倍率をサポートしていないのはなぜですか?
let newHighDouble = Double(exactly: highDecimal as NSNumber)!
print(newHighDouble) // 1.7976931348623e+52
だから、308の大きさのみが52に減少しました! ここには何が起こっていますか?私はDecimal
が非常に大きな値を格納することができると思ったが、それも何Double
缶を保存することができないようだ!
ショートスニペットは:Double(exactly: Decimal(1.7976931348623e+308) as NSNumber)!
精度とスケールの関係です。ここでは[.NETの議論](https://stackoverflow.com/questions/618535/difference-between-decimal-float-and-double-in-net)ですが、Swiftにも適用されます。あなたは非常に大きな数値を格納するために 'Decimal'を使用しません。財務計算のように正確な10進浮動小数点数が必要なときは' Decimal'を使います。巨大な数字が必要な場合は、「bignum」のような外部ライブラリを使用してください。 –