NSString, чтобы удвоить выпуск - PullRequest
6 голосов
/ 03 августа 2011

Наверное, действительно просто, но я не понимаю ... У меня есть NSString 50.81114, и я хочу преобразовать его в двойной ...
В настоящее время я использую [string doubleValue], но это выходит как 50.811140000002
В чем дело?!

Дискотека

Ответы [ 3 ]

11 голосов
/ 03 августа 2011

из-за ограниченной точности double не может хранить 50.81114. Ближайшее значение, которое может быть сохранено в двойном числе: 50.811140000002.

Используйте взамен NSDecimalNumber . Как это:

NSString *string = @"50.81114";
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:string];
2 голосов
/ 03 августа 2011

Double (и любое число с плавающей запятой) имеет собственный предел точности, обычно он составляет около 15-16 цифр.Обратите внимание, что это не только для Objective-C, но и для всех языков из-за ограничения двоичного представления с плавающей запятой.

То, что вы показываете, является просто нормальным, поскольку 50.81114 не может быть точно представлено в двоичном виде, приближениенеобходимо использовать.

Вы можете прочитать Википедию для дальнейшего чтения.

1 голос
/ 03 августа 2011

Если вам нужно сохранить это число как десятичное, а не двоичное число, тогда используйте NSDecimalNumber вместо double.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...