2016-08-15 2 views
1

Я пытаюсь преобразовать строку в float, но она изменяет десятичные значения. например у меня есть строка:Преобразование String в Float или двойное значение меняет десятичные значения

NSString *str = @"33.641832"; 
float value = [str floatValue]; //33.6418304 

значение дают мне 33.6418304 вместо 33.641832. Я хочу преобразовать точно так же, как в строке.

ответ

1

Это связано с отсутствием точности поплавка.

По моему опыту, Float точно соответствует 7 значащим цифрам приблизительно.

33.641832 хранится как 33641832 * 10^-6, поэтому у вас есть 8 значащих цифр (33641832).

Вы должны использовать double, если хотите больше точности.

+0

Число фактически хранится в двоичном, а не в десятичном значении. –

+0

@SimonByrne Ха? Ты серьезно? – Droppy

+0

@SimonByrne да, очевидно, но это хранилище на 4 байта: 1 бит для знака, 8 для значения exp (base) и 22 бит для значащей цифры. Дополнительная информация: https://en.wikipedia.org/wiki/Single-precision_floating-point_format. –

0

Смотрите таблицу в this post Рике Риган:

float типа только гарантированно точно «туда-обратно» номер с 6 значащими цифрами. Для double s гарантия 15.

Смежные вопросы