Как я могу получить точное значение двойного?
У меня есть ситуация, когда:
void foo( const double d )
{
const double rounded_2_decimals = std::round(d*100.0) / 100.0;
std::cout << "d=" << d << std::endl;
std::cout << "r=" << rounded_2_decimals << std::endl;
}
Когда напечатано, d=3.125
, но r=3.12
вместо r=3.13
,
Я подозреваю, что это потому, что прошло в d
на самом деле 3.1249999.... Вот почему я вставил начальный cout, чтобы я мог видеть "истинное" значение передается. std::cout
округлить значения, прежде чем он отобразит их? Как еще я могу увидеть, как передается "реальное" значение?
1 ответ
Решение
Да, std::cout
выполняет округление значений, однако вы можете установить более высокую точность. Сначала включите iomanip
заголовок. Затем:
void foo( const double d )
{
const double rounded_2_decimals = std::round(d*100.0) / 100.0;
std::cout << "d=" << std::setprecision(9) << d << std::endl;
std::cout << "r=" << std::setprecision(9) << rounded_2_decimals << std::endl;
}
Пример живой программы здесь