Double 正在四舍五入我最后的 NSNumber 小数

Double is rounding my last NSNumber decimal

例如

                    print(message.timestamp!)

给我:1470938337.572778

                    print(Double(message.timestamp!))

给我:1470938337.57278

我需要像这样使用 double 转换为 NSDate:

date: NSDate(timeIntervalSince1970: Double(message.timestamp!))

但我还需要准确的时间戳,为什么要四舍五入?

看看这个示例代码:

import Foundation

let input: NSNumber = 1470938337.572778

print("   NSNumber: \(input)")
print("     Double: \(Double(input))")
print("doubleValue: \(input.doubleValue)")

输出:

   NSNumber: 1,470,938,337.57278 //not even this is printing correctly.
     Double: 1470938337.57278
doubleValue: 1470938337.57278

这是超出 IEEE 754 双宽度浮点数据类型可表示的精度的情况。问题不在 NSNumber -> Double 转换中(这是有道理的,因为 NSNumber 是 Double 的包装器)。