【问题标题】:Get more than 15 decimal places Swift获得超过 15 位小数的 Swift
【发布时间】: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


【解决方案1】:

为了获得更高的精度,请使用Float80 Type(此结构中的第一位用于符号):

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2021-10-25
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    相关资源
    最近更新 更多