iOS UInt64 номер ошибки

UInt64 intValue = 999999900;
float tt = intValue;
NSLog(@"float tt = %f", tt);

выходной результат равен "float tt = 999999872", так как вы можете видеть, что UInt64 конвертирует в float что-то теряет, Max float больше, чем 999999900, поэтому я думаю, что значение 999999900 может быть приведено к float, поэтому мой вопрос - почему потерять в iOS?

2 ответа

float имеет ограниченное количество точности. Это не размер числа, это количество значащих цифр (9 в данном случае).

использование double вместо float чтобы получить больше точности.

UInt64 intValue = 999999900;
double tt = intValue;
NSLog(@"double tt = %f", tt);

Почему вы используете float, а не double? Разве никто не говорил вам, что float имеет очень ограниченную точность (около 7 цифр), а double имеет около 15 цифр?

Как правило, вы никогда не должны использовать float вместо double, если вы сами не можете дать разумное объяснение, почему float будет более подходящим, чем double.

Итак, ваш вопрос: почему я теряю точность, когда я намеренно выбрасываю 8 цифр и точность, и что я могу сделать? Ответ очень прост: вы потеряли точность, потому что вы сами ее выбросили. Используйте double вместо float.

Другие вопросы по тегам