В Задаче C: Печать с плавающей точкой как есть - PullRequest
2 голосов
/ 29 ноября 2011

Я хочу напечатать точки с плавающей точкой в ​​простой программе калькулятора для iOS:

, если результат вычисления равен 5.555123125, а затем выведите точный 5,555123125.если результат 1,2, то 1,2.если 2,555, то 2,555.Не 2,56 или не 2,5555000.

Никаких заполнений нулями, отбрасываний, округлений вверх или вниз.Просто так.

Пробовал форматирование с% f, но мне пришлось указать количество цифр: например,% 10.4f.Пробовал% g, но он сделал автоматические изменения в соответствии с количеством цифр.

Так же, как это, это так сложно?

Ответы [ 3 ]

2 голосов
/ 29 ноября 2011
NSNumber * test = [NSNumber numberWithDouble:5.555123125];
NSLog(@"number = %@", test);

, кажется, работает.

0 голосов
/ 24 мая 2012

Числа с плавающей запятой одинарной точности (float) имеют 32 бита, из которых 8 используются для показателя степени. Это оставляет 24 значащих бита, что дает вам лог 10 (2 24 ) ≈ 7 значащих десятичных цифр. Если вам нужны более значимые цифры, перейдите к плавающей запятой с двойной точностью (double), что даст вам 64 бита с 11 для показателя степени и 53 для мантиссы. A double, следовательно, предоставляет log 10 (2 53 ) ≈ 15 значащих десятичных цифр.

Обратите внимание, что это верно для любого языка, который обеспечивает типы с плавающей запятой IEEE одинарной и двойной точности, а не только Objective-C. Кроме того, спецификатор формата printf для double равен %d, так что это должно работать нормально в Objective-C без необходимости указывать NSNumber:

NSLog(@"result = %d", 5.555123125);

Подробнее об арифметике с плавающей запятой:

0 голосов
/ 29 ноября 2011

Вы должны попробовать использовать %lf вместо %f для удвоений.

...