2015-05-29 91 views
0

我似乎正在爲某些數字獲得更精確的double值。雙數據類型問題

例如,69.55554,當分配給一個雙變量被保存爲69.555539999999993

使用的NSNumber和NSDecimalNumber代替我已經甚至試圖,無濟於事。 我使用的是swift,並沒有使用objective-c測試過。

任何想法爲什麼發生這種情況,以及如何解決它(或解決它)?謝謝!我曾經NSDecimalNumber

var doubleNumber : Double = 69.55554 
var decimalNumber   = NSDecimalNumber(double: doubleNumber) 

var label = UILabel(frame: CGRectMake(10, 20, 200, 40)) 
label.text = "\(decimalNumber.doubleValue)" 
self.view.addSubview(label) 
+0

你能告訴我們你使用NSDecimalNumber的代碼示例? – vib

+1

[每位計算機科學家應該瞭解的浮點算法](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 –

+0

NSDecimalNumber應該是解決這個問題的方法。我想它沒有被正確使用。 – vib

回答

0

代碼示例這是正確的。這是由於浮點值的機器精度造成的。

值不準確,但最接近可能。

0x4051638DF7A4E7AB = 69.555539999999993483470461797 < 69.55554 < 69.555540000000007694325176999 = 0x4051638DF7A4E7AC