Проблема в том, что ни вход value
, ни результат res
не могут быть точно представлены в памяти компьютера для 70,82.Как предложил @MatthieuBrucher, вы должны использовать std::lround
;рассмотрим следующий код:
auto value = 70.82;
std::cout << std::fixed << std::setprecision(20) << value << std::endl;
auto tmp = std::lround(value * 100.0);
std::cout << tmp << std::endl;
double res = static_cast<double>(tmp) / 100.00;
std::cout << std::fixed << std::setprecision(20) << res << std::endl;
, который дает следующий вывод:
70.81999999999999317879
7082
70.81999999999999317879
Однако вы можете сохранить результат в виде пары целых чисел, где первое будет представлятьнеотъемлемая часть, а вторая дробная часть:
auto res_integral = tmp / 100;
auto res_fractional = tmp % 100;
std::cout << res_integral << "." << res_fractional << std::endl;
Или просто сохраните ее как tmp
с учетом того, что вы храните 100 * x вместо x.