Точное значение с плавающей точкой из строки NSString - PullRequest
7 голосов
/ 31 июля 2011
NSString *str = @"37.3336";
float f = [str floatValue];

f равно 37,3335991.

Кроме округления этого значения, есть ли способ получить точное значение с плавающей точкой из строки NSString?

Ответы [ 2 ]

4 голосов
/ 31 июля 2011

не легко.Вполне возможно, что число, представленное в NSString, не имеет точного представления в качестве примитивного типа с плавающей точкой.

Если вы знаете, что ваш ввод никогда не превысит определенной длины, и вам не нужно разбирать примитивный тип с плавающей запятой, тогда вы можете использовать что-то вроде NSDecimalNumber (хорошо(до 38 цифр) или самостоятельно внедрите аналогичную утилиту, где вы отмечаете положение десятичной точки, анализируете число как целое число и заново вставляете десятичную точку в правильном месте всякий раз, когда вам нужно распечатать ее.

Или если ваша длина ввода должна быть неограниченной, то единственное, что вы действительно можете попробовать, это использовать арифметическую библиотеку произвольной точности.

Обратите внимание, что с любым из этих подходов вы все равно будетене сможет построить примитивное значение с плавающей точкой, которое гарантированно точно будет соответствовать вашему вводу.Если вам нужна точная точность, вы просто не можете полагаться на float и double.

4 голосов
/ 31 июля 2011

Используйте [NSDecimalNumber decimalNumberWithString:locale:]. Это позволит сохранить число в десятичном формате, а не в двоичном формате.

...