Как сделать так, что бы функция выводила переменные типа 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 точно никак не может, но вывести с ограничением можно. Могу даже два способа дать:
- Из языка C -
printf. Для этого нужно подключить библиотеку stdio.h:
float a = 5.341352;
printf("%.2f", a);
- Из C++ -
setprecision. Для этого нужно подключить библиотеку iomanip:
float a = 5.341352;
cout << setprecision(3);
cout << a;