获得超过15位小数的Swift方法

3

这是一个非常简单的问题。我发现Double类型的数字最多只能保留15位小数。举个例子,看下面的代码片段:

var test : Double = 3.141592653589793238462643383279

Swift playgrounds将这个Double的值显示为3.141592653589793。有没有可能让Double保留超过15位小数?从苹果的文档来看,似乎应该是可能的:
“Double的精度至少为15位小数,而Float的精度可能只有6位小数。使用适当的浮点类型取决于您的代码中需要处理的值的性质和范围。在任何一种类型都可以使用的情况下,优先选择Double。”
其中“至少”一词表明这是可能的,但我找不到任何方法来实现。我也知道这不是Swift Playgrounds简单地截断输出中的值。以下代码返回true,即使值不同,因此很明显double仅存储并比较了15位小数:
var test : Double = 3.141592653589793238462643383279

var result = test == 3.1415926535897932384626433

“至少”意味着根据数值的大小和值,你可能会得到多出一个小数位。他们可能还在指的是长双精度类型,但我对此表示怀疑。如果你需要更多位数,请使用十进制或大数类型。 - Shaggi
“至少15”意味着你可能会得到16。这就是对于Double的全部内容。看一下NSDecimalNumber/Decimal,可以获取最高达到38的值。 - rmaddy
另请参阅https://dev59.com/nVwY5IYBdhLWcg3wF0de。 - rmaddy
1个回答

0

为了更高的精度,请使用Float80 Type(该结构的第一个位用于表示符号):

Float80.exponentBitCount        // 15
Float80.significandBitCount     // 63

Double.exponentBitCount         // 11
Double.significandBitCount      // 52

enter image description here

希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接