Подтвердить что ты не робот

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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