2016-08-11 51 views
1

例如雙被四捨五入我最後的NSNumber小數

    print(message.timestamp!) 

給我:1470938337.572778

    print(Double(message.timestamp!)) 

給我:1470938337.57278

我需要使用雙轉換成NSDate的這樣:

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

但我也需要時間戳準確,爲什麼它四捨五入?

+0

它似乎工作得很好http://swiftlang.ng.bluemix.net/#/repl/57acc49a603420ce5f482bb3 – Alexander

+0

'timestamp'是一個字符串嗎? –

+0

不,這是一個NSNumber,這真是令人困惑爲什麼它這樣做 – slimboy

回答

1

看看這個示例代碼:

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的包裝)。