【发布时间】:2019-05-10 18:46:59
【问题描述】:
这是一个非常简单的问题。在我看来,双打的上限为小数点后 15 位左右。比如下面的代码sn -p:
var test : Double = 3.141592653589793238462643383279
Swift Playground 显示这个 Double 的值为 3.141592653589793。有什么方法可以让我在 Double 上获得超过 15 位小数?从Apple的文档中,听起来应该是可能的:
Double 的精度至少为 15 位小数,而 Float 的精度可以低至 6 位十进制数字。这 使用适当的浮点类型取决于性质和范围 您需要在代码中使用的值。在以下情况下 任何一种类型都合适,Double 是首选。
说“至少”的部分让人觉得这是可能的,但我找不到任何这样做的方法。我也知道这不是 Swift Playgrounds 简单地截断输出中的值。以下代码返回 true,即使值不同,所以很明显 double 只存储和比较最多 15 位小数:
var test : Double = 3.141592653589793238462643383279
var result = test == 3.1415926535897932384626433
【问题讨论】:
-
“至少”意味着您可能会多得到一位小数,具体取决于幅度和数值。他们可能还指的是 long double 类型,但我对此表示怀疑。如果您需要更多数字,请使用小数或大数字类型。
-
“至少 15”意味着您可能会得到 16。这就是
Double。看NSDecimalNumber/Decimal,最多38。
标签: swift cocoa-touch double