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”等外部库 –