lexical_cast strtof strtold失去准确性?

时间:2016-04-23 11:12:05

标签: c++ lexical-cast

下面:

IMappingEngine

输出:

private IMappingEngine_mapper;
public RssLocalRepository(IMappingEnginemapper)
{
    _mapper = mapper;
}

为什么输出不是277499.84?

1 个答案:

答案 0 :(得分:3)

这不是操作本身失去准确性,而是输出

您可以使用I / O操纵器std::setprecision来控制数字精度。以下将使用double的完整精度(假设流设置为十进制输出)。

double value = boost::lexical_cast<double>(str);
std::cout << std::setprecision( std::numeric_limits<double>::digits10 + 1 ) << value;

或者您可以使用std::ios_base::precision。如果要在之后将精度恢复为原始值,这非常有用。

auto old_precision = cout.precision( std::numeric_limits<double>::digits10 + 1 );
cout << value;
cout.precision( old_precision );