Нет хорошего способа сделать это с обычными double
с, но вы можете написать class
или просто struct
как
struct lim_prec_float {
float value;
int precision;
};
тогда ваша функция
lim_prec_float testfn() {
double i = 3.365737;
return lim_prec_float{i, 4};
}
(4 = 1 перед точкой + 3 после. Это использует список инициализации C ++ 11, было бы лучше, если бы lim_prec_float
был class
с правильными конструкторами.)
Если вы хотите вывести переменную, сделайте это с помощью пользовательского
std::ostream &operator<<(std::ostream &tgt, const lim_prec_float &v) {
std::stringstream s;
s << std::setprecision(v.precision) << v.value;
return (tgt << s.str());
}
Теперь вы можете, например,
int main() {
std::cout << testfn() << std::endl
<< lim_prec_float{4644.322345, 7} << std::endl;
return 0;
}
который выдаст
3.366
4644.322
это потому, что std::setprecision
означает округление до желаемого количества мест, что, вероятно, то, что вы действительно хотите. Если вы на самом деле имеете в виду усечение , вы можете изменить operator<<
с помощью одной из функций усечения, заданных другими ответами.