2015-05-29 4 views
0

Кажется, я получаю более точную версию двойного значения для определенных чисел.Проблема с двойным типом данных

Например, 69,55554, когда присваивается двойной переменной сохраняется как 69,555539999999993

Я даже попытался использовать NSNumber и NSDecimalNumber вместо, но безрезультатно. Я использую swift и не тестировал то же самое с использованием объектива-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