Xcode - отладчик не показывает правильное значение - PullRequest
1 голос
/ 26 июля 2011

Давайте попробуем это:

float test = 3.56;
float roundedVal = round(test * 10.0f) / 10.0f;
NSLog (@"%f", roundedVal);

Почему NSLog показывает 3.600000, а отладчик 3.5999999? На какое правильное значение я могу рассчитывать?

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

A float не очень точный, и вы не можете ожидать, что они будут отображаться точно от одного «вида» к другому в зависимости от множества факторов.Прочитайте Что должен знать каждый компьютерный специалист об арифметике с плавающей точкой .

Сводится к следующему: используйте double, если вы действительно хотите точность.

1 голос
/ 04 ноября 2011

Нет «правильного значения».Ожидаемое значение «3,6» не имеет точного двоичного представления.Поэтому значение, которое компьютер использует внутри, является приблизительным.При печати значения необходимо преобразовать его обратно в десятичное.В вашем случае двоичное представление скорее всего чуть меньше 3,6.NSLog округляет его, а отладчик округляет.

Использование double вместо float, как говорит принятый ответ, ничего не меняет в этом.

1 голос
/ 26 июля 2011

Правильным значением является отладчик. Вы можете увидеть это с упрощенной версией кода выше:

float test = 3.5999999;
NSLog (@"%f", test);

В этом случае вы получите те же результаты, что и упомянутые выше: в журнале указано 3.600000, а в отладчике - 3.5999999. Во всех случаях отладчик имеет значение коррекции по сравнению с NSLog. Когда мы копаем немного глубже, мы видим, что NSLog слегка массирует значение с плавающей точкой.

На самом деле - вам, вероятно, следует использовать здесь двойное значение для поддержания точности, которую вы ищете.

...