У меня проблема, похожая на ту, что в этом вопросе: Как получить неформатированное строковое представление NSDecimal или NSDecimalNumber? Мне нужно число в строковом формате, точно представленное как NSNumber, но это число преобразуется обратно в строку в других местах, и Я не могу этого избежать. Проблема, с которой я сталкиваюсь, заключается в том, что когда число преобразуется обратно в строку, в некоторых случаях строка находится в экспоненциальном представлении.
NSDecimalNumber *dn = [NSDecimalNumber decimalNumberWithString:@"0.0001"];
NSString *s = [dn stringValue]; // s will be @"1E-4"
Как предотвратить отображение этого числа в экспоненциальном представлении?
Я работаю в версии GNUstep примерно 2005 года (возможно, v1.11.1 для GNUstep Base), а не на Mac или iPhone, что может объяснить некоторые различия в поведении по сравнению с другим вопросом, на который я ссылался. Я просмотрел API базовой библиотеки и документации в моей собственной установке GNUstep, но я не могу найти ничего, что могло бы помочь.
РЕДАКТИРОВАНИЕ 7 февраля 2012 г.:
Вопрос немного изменился, но цель осталась прежней. Первоначально я не думал, что смогу управлять частью вывода строки, но я могу передать значение обратно в виде строки. На данный момент я пытаюсь использовать строку форматирования, но я все еще хочу предотвратить появление научной нотации.
[NSString stringWithFormat:@"%1.14g", [val doubleValue]]
Я решил использовать %g
, потому что нам нужно определенное количество значащих цифр для значения. Если я использую %f
, я могу обрезать лишние нули, но число не всегда получается чистым. Например, 800000000,79 выглядит как 800000000,7899999600.
Есть ли способ получить чисто отформатированное число с определенным количеством значащих цифр (или знаков после запятой) без отображения экспоненциального представления перед этим количеством цифр?
Я также готов принять совет C.