У меня проблемы с округлением двойного балла до двух десятичных знаков. (ex of GPA нужно было округлить: 3.67924) В настоящее время я использую ceil для округления, но в настоящее время он выводит его как целое число (368)
вот что у меня сейчас
if (cin >> gpa) {
if (gpa >= 0 && gpa <= 5) {
// valid number
gpa = ceil(gpa * 100);
break;
} else {
cout << "Please enter a valid GPA (0.00 - 5.00)" << endl;
cout << "GPA: ";
}
}
использование вышеприведенного кода с 3.67924 приведет к выводу 368 (что я и хочу, но без периода между целым числом и десятичными числами). Как я могу это исправить?
Вы не можете округлить двойные до двух знаков после запятой. Двойники не иметь десятичные разряды. У них есть двоичные разряды, и они не соизмеримы с десятичными разрядами.
Если вам нужны десятичные разряды, вы должны использовать десятичное число, например при форматировании для вывода с помощью printf («%. 2f», …).
Попробуй это. Но твой cout
оператор в другом состоянии, поэтому он не даст желаемый результат для 3.67924.
if (cin >> gpa)
{
if (gpa >= 0 && gpa <= 5) {
// valid number
gpa = ceil(gpa * 100);
gpa=gpa/100;
break;
}
else
{
cout << "Please enter a valid GPA (0.00 - 5.00)" << endl;
cout << "GPA: ";
}
}
Если это просто вопрос записи на экран, то для округления числа используйте
std::cout.precision(3);
std::cout << gpa << std::endl;
числа с плавающей запятой не представлены точно, поэтому, округляя значение внутри себя, а затем используя его в своих вычислениях, вы увеличиваете неточность.