2015-05-29 132 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