Поведение печати по умолчанию для NSNumber
обрезает любые начальные нули. Поэтому, даже если базовое значение представляет собой число с плавающей запятой, если нет фактических ненулевых чисел с плавающей запятой, оно будет печататься как целое число.
Что касается вашего второго вопроса, то использование %i
и %f
неверно в вашей записи журнала, так как вы регистрируете объект. Вы можете использовать %p
для записи значения указателя объекта, если хотите, но я не думаю, что это полезно для вас в данный момент. Если вы хотите использовать %f
, чтобы получить стандартное поведение печати с плавающей точкой в printf, тогда вам нужно фактически передать ему float вместо объекта, как в NSLog(@"%f", [[arr objectAtIndex:0] floatValue])
.
Если все, что вас действительно интересует, это то, хранит ли NSNumber
внутреннее число с плавающей запятой, вы можете распечатать результаты метода -objcType
, который даст вам строку @encode
для базового значение, но я не уверен, почему вас волнует, какой конкретный базовый формат NSNumber
используется для хранения вашего значения, если он может вернуть вам значение в нужном формате (например, путем вызова -floatValue
).