Ограничьте два-два десятичных знака

Как добиться следующего преобразования из двух строк в строку:

1.4324 => "1.43" 9.4000 => "9.4" 43.000 => "43" 

т.е. я хочу округлить до десятичных знаков, но не хочу никаких конечных нhive, т.е. я не хочу

 9.4 => "9.40" (wrong) 43.000 => "43.00" (wrong) 

Таким образом, этот код, который у меня есть сейчас, не работает, поскольку он отображает лишние нули:

 [NSString stringWithFormat: @"%.2f", total] 

Использовать NSNumberFormatter . См. Главу « Руководство по программированию форматирования данных» .

Вы сделали простую ошибку. Это будет работать:

 [NSString stringWithFormat: @"%.2lf", total] 

Самый простой способ – это, вероятно, сделать свой собственный. Я должен был сделать это в 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 просто разделите конечные нули и конечное десятичное число, если оно было целым.

Очевидно, вы можете захотеть поместить его в функцию или class, чтобы вы могли получить его из любой точки, не дублируя код по всему месту.

Я не знаком с объективом C, но это невозможно при стандартном форматировании в формате printf.

Использование% g будет сортировать работу, но для больших или малых чисел она будет использовать научную нотацию (например, 9.6e + 6, 4.2e-7), а не десятичную нотацию.

Эквивалентный вопрос был задан здесь для C / C ++ , и в этом случае ответ должен использовать% f, а затем вывести любые конечные 0 из строки. Не совсем элегантный.

Я уверен, что [[NSNumber numberWithFloat: f] stringValue] делает именно то, что вы хотите.

  • Используйте пользовательский разделитель тысяч в C #
  • VBA: преобразовать текст в число
  • Добавление начальных нhive с использованием R
  • C # конвертировать int в строку с нулями заполнения?
  • Изменение шрифта для richtextbox без потери форматирования
  • Как я могу поместить int с ведущими нулями при использовании оператора cout <<?
  • Правильный формат валюты, когда не отображается национальная валюта культуры
  • Форматирование StAX XML в Java
  • формат даты в c #
  • Преобразование ISO 8601 в NSDate
  • java: конвертировать float в String и String для float
  • Давайте будем гением компьютера.