Как сделать так, что бы функция выводила переменные типа float c 2 цифрами после точки, а не с 6?

У меня есть программа, которая будет выполнять задачи с обработкой массива структур. Пожалуйста, подскажите, как сделать так, что бы при выводе массива элементы его структур с типом float сохраняли 2 цифры после точки (обозначают эти элементы время и не могут иметь больше 2 цифр после точки), а не 6, как сейчас выводит? Моя программа:

#include <QtCore/QCoreApplication>
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdio.h>

using namespace std;

void showAll();
int getInt(string prompt, int min, int max);
float getFloat(string prompt, float Min, float Max);
char* getStr(string prompt, int maxMemory);
void pause();

#define AR_SIZE 4
#define STAT_SIZE 8

struct BusTrans {
    char stat[STAT_SIZE];
    float time;
    int number;
    int price;
};
BusTrans *ar;
int capacity;
int size;

int main(int argc, char *argv[]){
    QCoreApplication a(argc, argv);
    BusTrans initAr [] = {
        {"P1", 14.30, 4583, 160},
        {"P2", 13.10, 8113, 210},
        {"P3", 15.00, 6342, 140},
        {"P4", 12.35, 7244, 300}
    };
    size = 4;
    capacity = 5;
    ar = new BusTrans[capacity];
    memcpy(ar, initAr, sizeof(BusTrans)*size);
    typedef void MenuFunc();
    struct MenuUnit{
        string text;
        MenuFunc *func;
    };
    MenuUnit menu[] = {
        {"Show all routs", showAll},
        {"Add rout"},
        {"Sort by stations"},
        {"Sort by time"},
        {"Sort by price"},
        {"Cheaper than 200"},
        {"Exit", NULL},
    };
    while(true){
        system("cls");
        int count = 0;
        for( ; ; count++){
            cout  << " " << count + 1 << ". "
                    << menu[count].text << endl;
            if(menu[count].text.compare("Exit") == 0)
                break;
        }
        int variant = getInt(" Enter variant number, please ",
                             1, count+1);
        if(variant == count +1){
            cout << "\nThe end.\n";
            break;
        }
        menu[variant - 1].func();
    }
    return a.exec();
}
// Вывод массива на экран
void showAll(){
    cout << "\nAll routs today:\n" ;
    printf(" %-*s %10s %10s %10s\n", STAT_SIZE, "Routs",
                "Departure", "Number", "Price");
    for(int i=0;i<size;i++){
        printf(" %-*s %10f %9d %10d\n", STAT_SIZE, ar[i].stat,
               ar[i].time, ar[i].number, ar[i].price);
    }
    pause();
}
// Функции для помощи
int getInt(string prompt, int min, int max){
    int num; string s;
    do{
        cout << prompt;
        getline(cin,s);
        num = atoi(s.c_str());
    } while(num < min || num > max);
    num = atoi(s.c_str());
    return num;
}
float getFloat(string prompt, float Min, float Max){
    float Num; string s;
    do{
        cout << prompt;
        string s;
        Num = atoi(s.c_str());
    } while(Num < Min || Num > Max);
    Num = atoi(s.c_str());
    return Num;
}
char* getStr(string prompt, int maxMemory){
    cout << prompt;
    string s;
    getline(cin,s);
    if(s.length() >= maxMemory)
        s = s.substr(0,maxMemory-1);
    char* cStr = new char[s.length() +1];
    return strcpy(cStr, s.c_str());
}
void pause(){
    cout <<"Press any button to continue: ";
    getch();
};

Ответы (2 шт):

Автор решения: Alexey Rakhmaninov

Просьба, меньше кода, хватит лишь функции которая возвращает значение, хотя для данного вопроса можно и без кода вообще

Чтобы округлить до двух чисел можешь использовать это:

float value = 5.343456;
round(value*100)/100;
// out 5.34
→ Ссылка
Автор решения: nyekitka

Ну хранить меньше знаков float точно никак не может, но вывести с ограничением можно. Могу даже два способа дать:

  1. Из языка C - printf. Для этого нужно подключить библиотеку stdio.h:
float a = 5.341352;
printf("%.2f", a);
  1. Из C++ - setprecision. Для этого нужно подключить библиотеку iomanip:
float a = 5.341352;
cout << setprecision(3);
cout << a;
→ Ссылка