Ошибка точности при использовании NSNumberFormatter numberFromString - PullRequest
2 голосов
/ 21 июня 2011

Почему следующий код выдает "numberFromString = 9.390000000000001", а не "numberFromString = 9.39"?

NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];
[numFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numFormatter setPositiveFormat:@"$##0.00"];
[numFormatter setNegativeFormat:@"-$##0.00"];
NSNumber *nTCA = [numFormatter numberFromString:@"$9.39"];

NSLog(@"numberFromString = %@", nTCA);

Я получаю вышеуказанные результаты на OS X 10.6 и iOS 4.3.3.

Как лучше всего исправить эту ошибку?

Спасибо

1 Ответ

4 голосов
/ 21 июня 2011

Я подозреваю, что вы столкнулись с ошибкой в ​​результате использования точности с плавающей точкой. Способ исправить это - использовать NSDecimalNumber вместо NSNumber. Об этом есть отличный пост .

NSDecimalNumber имеет метод + decimalNumberWithString:. Будет ли этого достаточно для ваших целей?

...