Ограничьте вдвое большее по сравнению с двумя десятичными разрядами [дубликат]

Мне нравится библиотека Apache Commons IO. Смотрите на его версию ByteArrayOutputStream, который имеет toString(String enc) метод, а также toByteArray(). Используя существующие и доверяемые компоненты как палата общин проект позволяет Вашему коду быть меньшим и легче расширить и повторно иметь целью.

18
задан Jacob 27 May 2015 в 22:44
поделиться

5 ответов

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

-2
ответ дан 30 November 2019 в 05:59
поделиться

Самый простой способ - это, вероятно, свернуть свой собственный. Мне приходилось делать это на 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
ответ дан 30 November 2019 в 05:59
поделиться

Я не знаком с целью C, но это невозможно со стандартным форматированием в стиле printf.

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

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

1
ответ дан 30 November 2019 в 05:59
поделиться

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

[NSString stringWithFormat: @"%.2lf", total]
35
ответ дан 30 November 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: