Операция float << путем установки точности как для целочисленной части, так и для части с плавающей точкой - PullRequest
2 голосов
/ 17 июля 2011

Я хотел бы напечатать числа с плавающей точкой в ​​таком формате.

01234.56

Я использую следующую функцию для округления числа с плавающей запятой до n цифр.

double round(double val, int precision)
{
    std::stringstream s;
    s << std::setprecision(precision) << std::setiosflags(std::ios_base::fixed) << val;
    s >> val;
    return val;
}

ИВ следующей строке выведите любое число с ведущими нулями до фиксированной длины.

setfill ('0') << setw(5) << number

Но когда я пытаюсь объединить эти два значения, я получаю непоследовательную длину, как в следующих примерах:

8.2 => 008.2
4.57 => 04.56

Я хотел бы получить такой вывод:

8.2 => 08.20
4.57 => 04.57

Можете ли вы показать мне такую ​​функцию, как string myround (double d, intpart n, floatpart f), которая возвращает:

myround (1234.5, 5, 2) => 01234.50
myround (1234.569, 5, 2) => 01234.57

Я представляю, что его уже спрашивали, но я не смог найти его с помощью внутренней поисковой системы.

1 Ответ

2 голосов
/ 17 июля 2011

Манипулятор fixed поможет, я думаю, мой пример ниже выводит то, что вы хотели:

#include <iostream>
#include <iomanip>
using namespace std;
int main(void) {
    cout << setprecision(2) << setfill ('0') << setw(5) << fixed << 8.2 << endl;
    cout << setprecision(2) << setfill ('0') << setw(5) << fixed << 4.57 << endl;
}

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

...