Как переместить десятичную точку влево, сохраняя количество отображаемых цифр?

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

Моя функция cout просто

void taxPrint(std::vector<TaxPayer> &citizen)
{
    int loops = 0;

    std::cout << "\nTaxes due for this year: \n" << std::endl;

    do
    {
        std::cout << "Tax Payer #" << loops << " : $" << citizen[loops].taxes << std::endl;
        loops++;
}
while (loops + 1 <= SIZE);

и результирующий вывод в консоли

Tax Payer #0 : $450000
Tax Payer #1 : $210000

Тем не менее, я хочу, чтобы это было

Tax Payer #0 : $4500.00
Tax Payer #1 : $2100.00

Я возился с setw() и setprecision(), но я не совсем понимаю, как они работают.


person Cartino    schedule 02.02.2019    source источник
comment
Что такое citizen[loops].taxes? Попробуйте создать минимально воспроизводимый пример, чтобы показать нам.   -  person Some programmer dude    schedule 02.02.2019
comment
Я могу вообще удалить это из примера, моя проблема заключается исключительно в том, как отображать правильные десятичные дроби.   -  person Cartino    schedule 02.02.2019
comment
Нет, вы не должны удалять его, так как он кажется ключевой частью вашей проблемы. С выводом, который вы показываете, кажется, что это значение integer, что означает, что нет десятичных знаков для отображения.   -  person Some programmer dude    schedule 02.02.2019
comment
Это поплавок. Я просто говорю о функции, которая выводит эти числа, как я уже сказал, но если вы хотите увидеть больше полной программы, она у меня есть здесь: stackoverflow.com/questions/54488995/   -  person Cartino    schedule 02.02.2019
comment
Для начала, вы пробовали разделить значение на 100?   -  person Some programmer dude    schedule 02.02.2019
comment
Думаю, я не подумал об этом. Из любопытства, однако, есть ли способ справиться с этим только с помощью инструментов, предоставляемых iomanip?   -  person Cartino    schedule 02.02.2019
comment
Нет, поскольку ваше значение не то, что вы хотите, вы не можете волшебным образом вставить десятичные точки там, где оно не принадлежит. Вам нужно напечатать правильное значение.   -  person Some programmer dude    schedule 02.02.2019


Ответы (1)


std::setw на самом деле не имеет ничего общего с точностью значения, он предназначен для заполнения строки такими префиксами, как: 001-0123-9124 (дополняется 0)

Пример: std::cout << std::setfill('0') << std::setw(5) << 5 << std::endl; напечатает 00005

Вот как его использовать с помощью std::fixed и std::setprecision:

void taxPrint(std::vector<TaxPayer> &citizen)
{
    int loops = 0;

    std::cout << "\nTaxes due for this year: \n" << std::endl;

    do
    {
        std::cout << "Tax Payer #" << loops << " : $" << std::setprecision(2) 
                  << std::fixed << citizen[loops].taxes / 100. << std::endl;
        loops++;
    }
    while (loops + 1 <= SIZE);
} // Don't miss this bracket!

Кроме того, посмотрите на этот вопрос, чтобы узнать больше об указании фиксированной точности для стоимость...

person Ruks    schedule 02.02.2019