NSDateFormatter timeIntervalSince1970 奇怪的毫秒行为

NSDateFormatter timeIntervalSince1970 strange behavior with milliseconds

我正在尝试使用 NSDateFormatter 解析一个以毫秒为单位的日期,当我打印出自 1970 年以来的时间间隔时,我得到了奇怪的结果。这是我的测试代码:

var timeStr = "2015-09-29 14:32:42.297-07"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSx"
let date = dateFormatter.dateFromString(timeStr)!
let dateFormatted = String(format: "%.20f", date.timeIntervalSince1970)
print("date: \(dateFormatted)")

结果:"date: 1443562362.29699993133544921875\n"

它不是以 297 结尾,而是以接近 297 的结尾。为什么?

似乎这就是双打的工作方式。它与 NSDateFormatter 无关。如果我用值 2.3 做一个双精度值然后将它打印到小数点后 20 位,我得到 2.99999990453636... 或其他东西。