Мне нравится библиотека Apache Commons IO. Смотрите на его версию ByteArrayOutputStream, который имеет toString(String enc)
метод, а также toByteArray()
. Используя существующие и доверяемые компоненты как палата общин проект позволяет Вашему коду быть меньшим и легче расширить и повторно иметь целью.
Используйте NSNumberFormatter . См. Главу Форматирование чисел в Руководстве по программированию форматирования данных .
Я почти уверен, что [[NSNumber numberWithFloat: f] stringValue] делает именно то, что вы хотите.
Самый простой способ - это, вероятно, свернуть свой собственный. Мне приходилось делать это на C раньше, так как нет способа добиться желаемого поведения с форматированием printf
.
В Objective-C это тоже не намного проще. Я бы попробовал:
NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
while ([ftotal hasSuffix:@"0"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
if ([ftotal hasSuffix:@"."]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
или этот (возможно, более быстрый) вариант:
NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
if ([ftotal hasSuffix:@".00"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-3];
} else {
if ([ftotal hasSuffix:@"0"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
}
stringWithFormat
гарантирует, что всегда будет ". Nn"
в конце ( где n
- цифровой символ). while
и if
просто удаляют конечные нули и конечную десятичную дробь, если это было целое число.
Очевидно, вы можете захотеть поместить его в функцию или класс, чтобы вы могли получить его откуда угодно, не дублируя код повсюду.
Я не знаком с целью C, но это невозможно со стандартным форматированием в стиле printf.
Использование% g могло бы вроде как работать, но для больших или малых чисел он будет использовать научную нотацию (например, 9.6e + 6, 4.2e-7) вместо десятичной.
Эквивалентный вопрос был задан для C / C ++ здесь , и в этом случае ответ будет следующим: используйте% f, а затем удалите все завершающие 0 из строки. Не совсем элегантно.
Вы сделали простую ошибку. Это будет работать:
[NSString stringWithFormat: @"%.2lf", total]