Есть код:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float comission = 0, minsumm = 0;
cin >> comission >> minsumm;
comission = comission / 100;
int num;
cin >> num;
float sum = 0;
for (int i = 0; i < num; i++)
{
float temp;
cin >> temp;
sum += temp;
double proc = temp * comission;
if (proc >= minsumm) sum +=proc;
else sum += minsumm;
}
cout << std::fixed << setprecision(2) << sum;
}
К нему у меня есть пара вопросов. Почему при comission = comission / 100 3 / 100 становится 0.0299999993? Почему введенное 1.20 в переменную minsumm с клавиатуры становится 1.20000005?
Вернее, почему так я знаю, но не знаю как исправить это. Можно было просто обрезать все знаки после какого-нибудь четвертого знака, т. к. дальше расчетов в задаче точно не будет, но тогда 3 / 100 станет 0.0299 вместо 0.0300.
А округление в задаче всегда должно быть (все после второго знака после запятой число должно округляться вниз), но если округлять тот же пример то comission будет 0.02, а не 0.03.
Еще я читал про decimal, но в c++ в стандартных библиотеках его нет, нужно что-то качать, а в задаче разрешено использовать только стандартные библиотеки.