target-c stringvalue из двойного - PullRequest
       39

target-c stringvalue из двойного

7 голосов
/ 13 декабря 2011

У меня есть следующий код:

double d1 = 12.123456789012345;

NSString *test1 = [NSString stringWithFormat:@"%f", d1]; // string is: 12.123457

NSString *test1 = [NSString stringWithFormat:@"%g", d1]; // string is: 12.1235

Как получить строковое значение, точно такое же, как d1?

Ответы [ 2 ]

12 голосов
/ 13 декабря 2011

Это может помочь вам взглянуть на руководство Apple по Спецификаторы формата строки .

%f  64-bit floating-point number 
%g  64-bit floating-point number (double), printed in the style of %e if the exponent is less than –4 or greater than or equal to the precision, in the style of %f otherwise

Также читайте о Точность с плавающей запятой (in) и, конечно, Что должен знать каждый компьютерный ученый об арифметике с плавающей запятой .

Если вы действительно хотите, чтобы строка точно соответствовала двойному, тогда используйте NSString для ее кодирования ипозвоните doubleValue, когда вы хотите значение.Также взгляните на NSNumberFormatter.

6 голосов
/ 13 декабря 2011

Как насчет

NSString *test1 = [NSString stringWithFormat:@"%.15f", d1];

Или просто пойти на удвоение как

NSString *test1 = [NSString stringWithFormat:@"%lf", d1];
...