setprecision
не изменяет точность значений типа double, а только точность, используемую при преобразовании в строку.
А преобразование значений типа double в строки является относительно дорогой операцией, поэтому накладные расходы на одну дополнительную функциюЗвонок должен быть незначительным.Если в коде, критичном к производительности, используется преобразование двух строк, то вы делаете это неправильно.
Мой совет - написать такую функцию, как:
std::string FmtDbl(double d)
{
std::ostringstream os;
os << std::setprecision(4) << d;
return os.str();
}
И использовать эту функциювезде, где вам нужно преобразование.