小编And*_*dré的帖子

pow 使用带负指数的 Double 或 Decimal 返回不同的结果

使用 Xcode 11.1 如果我运行一个操场:

pow(10 as Double, -2)  // 0.01
Run Code Online (Sandbox Code Playgroud)

我使用 Float 得到相同的输出:

pow(10 as Float, -2) // 0.01
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用 pow(Decimal, Int) 如下所示:

pow(10 as Decimal, -2) // NaN
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?

有没有更好的方法来处理 pow 和 Decimal 的正负指数?我需要十进制,因为它们的行为与我对货币价值的期望一样。

编辑:我知道如何从数学的角度解决这个问题,我想了解它为什么会发生和/或它是否可以在不增加我的代码的圈复杂度的情况下解决(例如检查指数是否为负并执行 1 /战俘)

ios swift

6
推荐指数
2
解决办法
472
查看次数

在日期中加上天数,计算出差异不会导致预期结果

我不确定我在做什么错。如果您在Xcode Playground(我使用的是11.1)中运行此代码,您会发现它在随机日期上失败,在我的系统中,该日期恰好是添加到当前日期后6500天之后的某个日期。但是这些日期不是固定的。

(1...10000).forEach { days in
    let calendar = Calendar(identifier: .gregorian)
    var dayComponent = DateComponents()
    dayComponent.day = days
    let date = Date()
    let someFutureDate = calendar.date(byAdding: dayComponent, to: date)!

    let difference = calendar.dateComponents([.day], from: date, to: someFutureDate)

    if (days != difference.day!) {
        print("WAT \(date) - \(someFutureDate) \(days) \(difference.day!)")
    }
}
Run Code Online (Sandbox Code Playgroud)

一些输出(在我的测试中从130到160次失败,输出有所不同):

WAT 2019-10-31 14:01:47 +0000 - 2038-01-21 14:01:47 +0000 6657 6656
WAT 2019-10-31 14:01:47 +0000 - 2038-01-26 14:01:47 +0000 6662 6661
WAT 2019-10-31 14:01:47 +0000 - 2038-02-02 14:01:47 +0000 6669 …
Run Code Online (Sandbox Code Playgroud)

date gregorian-calendar swift

5
推荐指数
1
解决办法
64
查看次数

标签 统计

swift ×2

date ×1

gregorian-calendar ×1

ios ×1