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'來存儲非常大的數字,當你需要精確的十進制浮點數時,你可以使用'Decimal',就像在財務計算中一樣。當需要大量數字時,請使用「bignum」等外部庫 –