Как я могу получить точное значение двойного?

У меня есть ситуация, когда:

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 округлить значения, прежде чем он их отображает? Как еще я могу увидеть, как передается «реальное» значение?

0

Решение

Да, 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;
}

Пример живой программы Вот

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]